# Description:
#   The Java library builders, which are used by Blaze to compile Java
#   source code.
#   Open-sourced as part of Bazel
#
package_group(
    name = "packages",
    packages = [
        "//java/com/google/devtools/build/buildjar/...",
        "//third_party/bazel/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/...",
    ],
)

package(default_visibility = [":packages"])

licenses(["notice"])  # Apache 2.0

java_library(
    name = "optionsparser",
    srcs = [
        "InvalidCommandLineException.java",
        "OptionsParser.java",
    ],
    plugins = ["//java/com/google/devtools/build/buildjar/plugin/annotations:google_internal_checker"],
    visibility = [
        ":packages",
        "//java/com/google/devtools/demolition:__subpackages__",
        "//javatests/com/google/devtools/build/buildjar:__pkg__",
        "//javatests/com/google/devtools/demolition:__subpackages__",
    ],
)

java_library(
    name = "javac",
    srcs = glob([
        "javac/*.java",
    ]),
    plugins = ["//java/com/google/devtools/build/buildjar/plugin/annotations:google_internal_checker"],
    visibility = [
        "//java/com/google/devtools/build/buildjar:__pkg__",
        "//java/com/google/devtools/build/lib:__pkg__",
        "//javatests/com/google/devtools/build/buildjar:__pkg__",
    ],
    deps = [
        ":invalid_command_line_exception",
        "//java/com/google/common/annotations",
        "//java/com/google/common/base",
        "//java/com/google/common/collect",
        "//third_party/bazel/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins",
        "//third_party/java/jdk:langtools",
        "//third_party/java/jsr305_annotations",
    ],
)

JARHELPER_SRCS = [
    "jarhelper/JarHelper.java",
    "jarhelper/JarCreator.java",
]

java_library(
    name = "jarhelper",
    srcs = JARHELPER_SRCS,
    plugins = [
        # do not use the @GoogleInternal checker to avoid cycles when bootstrapping javac
    ],
    visibility = [
        ":__subpackages__",
        "//java/com/google/devtools/build/buildjar:__pkg__",
        "//java/com/google/net/grubby:__pkg__",
        "//javatests/com/google/devtools/build/buildjar:__pkg__",
        "//third_party/bazel/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine:__subpackages__",
        "//third_party/bazel/src/tools/android/java/com/google/devtools/build/android/idlclass:__pkg__",
        "//third_party/java_src/jdk:__subpackages__",
    ],
    deps = [
        "//java/com/google/common/hash",
        "//java/com/google/common/io",
    ],
)

# Bazel's BuildJar
java_library(
    name = "buildjar",
    srcs = glob(
        ["*.java"],
        exclude = JARHELPER_SRCS + [
            "InvalidCommandLineException.java",
        ],
    ),
    plugins = [
        "//java/com/google/devtools/build/buildjar/plugin/annotations:google_internal_checker",
    ],
    visibility = [
        "//java/com/google/android/apps/common/testing/devtools/f5/host:__subpackages__",
        "//java/com/google/devtools/build/buildjar:__subpackages__",
        "//java/com/google/devtools/build/lib:__pkg__",
        "//javatests/com/google/devtools/build/buildjar:__subpackages__",
    ],
    deps = [
        ":invalid_command_line_exception",
        ":jarhelper",
        ":javac",
        "//java/com/google/common/annotations",
        "//java/com/google/common/base",
        "//java/com/google/common/collect",
        "//java/com/google/common/io",
        "//third_party/bazel/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins",
        "//third_party/bazel/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins:classloader",
        "//third_party/bazel/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins:dependency",
        "//third_party/bazel/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins:errorprone",
        "//third_party/bazel/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins:processing",
        "//third_party/bazel/src/main/protobuf:worker_protocol_java_proto",
        "//third_party/java/jdk:langtools",
    ],
)

java_binary(
    name = "BazelJavaBuilder",
    main_class = "com.google.devtools.build.buildjar.BazelJavaBuilder",
    plugins = ["//java/com/google/devtools/build/buildjar/plugin/annotations:google_internal_checker"],
    visibility = [
        "//devtools/blaze/bazel:__subpackages__",
        "//devtools/blaze/exoblaze:__subpackages__",
        "//third_party/bazel:__subpackages__",
    ],
    runtime_deps = [":buildjar"],
)

java_library(
    name = "testing",
    testonly = 1,
    srcs = [
        "javac/testing/BlackHoleProcessor.java",
        "javac/testing/DummyAnnotationProcessor.java",
        "javac/testing/ErrorProneTestHelper.java",
        "javac/testing/InMemoryJavaFileManager.java",
    ],
    visibility = [
        "//java/com/google/devtools/build/buildjar:__subpackages__",
        "//third_party/bazel/src/java_tools/buildjar:__subpackages__",
    ],
    deps = [
        ":invalid_command_line_exception",
        ":javac",
        "//java/com/google/common/base",
        "//java/com/google/common/collect",
        "//third_party/bazel/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins",
        "//third_party/bazel/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins:errorprone",
        "//third_party/bazel/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel:BazelJavaCompiler",
        "//third_party/java/auto:auto_value",
        "//third_party/java/error_prone",
        "//third_party/java/jdk:langtools",
        "//third_party/java/jimfs",
        "//third_party/java/junit",
        "//third_party/java/truth",
    ],
)

filegroup(
    name = "bazel-srcs",
    srcs = glob(
        ["**/*"],
        exclude = [
            "BUILD",
            "javac/testing/**",
        ],
    ) + [
        "//third_party/bazel/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins:bazel-srcs",
        "//third_party/bazel/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/genclass:bazel-srcs",
    ],
    visibility = ["//third_party/bazel/src/java_tools/buildjar:__pkg__"],
)

java_library(
    name = "javac_options",
    srcs = [
        "javac/JavacOptions.java",
    ],
    plugins = ["//java/com/google/devtools/build/buildjar/plugin/annotations:google_internal_checker"],
    visibility = ["//java/com/google/devtools/build/buildjar:__pkg__"],
    deps = [
        "//java/com/google/common/base",
        "//java/com/google/common/collect",
    ],
)

java_library(
    name = "invalid_command_line_exception",
    srcs = ["InvalidCommandLineException.java"],
    plugins = ["//java/com/google/devtools/build/buildjar/plugin/annotations:google_internal_checker"],
    visibility = [
        "//java/com/google/devtools/build/buildjar:__subpackages__",
        "//javatests/com/google/devtools/build/buildjar:__subpackages__",
        "//third_party/bazel/src/java_tools/buildjar/java/com/google/devtools/build/buildjar:__subpackages__",
    ],
    deps = [],
)
