# Copyright 2018 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
load("//kotlin/builder:bootstrap.bzl", "kotlin_worker_lib")
load("//kotlin:kotlin.bzl", "kt_jvm_library")

# Should not be linked against to allow the compiler workspace to be switched out when toolchains support this.
_COMPILER_DEPS = [
    "@com_github_jetbrains_kotlin//:compiler",
    "@com_github_jetbrains_kotlin//:kotlin-annotation-processing",
    "@com_github_jetbrains_kotlin//:kotlin-script-runtime",
]

# Common depset for the builder.
_COMMON_DEPS = [
    "//kotlin/builder/proto",
    "@com_github_jetbrains_kotlin//:preloader",
    "@io_bazel_rules_kotlin_com_google_protobuf_protobuf_java//jar",
    "@io_bazel_rules_kotlin_com_google_protobuf_protobuf_java_util//jar",
    "@io_bazel_rules_kotlin_com_google_inject_guice//jar",
    "@io_bazel_rules_kotlin_aopalliance_aopalliance//jar",
    "@io_bazel_rules_kotlin_javax_inject_javax_inject//jar",
    "@io_bazel_rules_kotlin_com_google_guava_guava//jar",
    "@io_bazel_rules_kotlin_com_google_code_gson_gson//jar",
    "@com_github_jetbrains_kotlin//:kotlin-reflect",
    "@com_github_jetbrains_kotlin//:kotlin-stdlib",
    "@com_github_jetbrains_kotlin//:kotlin-stdlib-jdk7",
    "@com_github_jetbrains_kotlin//:kotlin-stdlib-jdk8",
]

# The compiler library, this is co-located in the kotlin compiler classloader.
kotlin_worker_lib(
    name = "compiler_lib",
    srcs = glob(["src/io/bazel/kotlin/compiler/**/*.kt"]),
    args = [
        "-jvm-target","1.8",
    ],
    neverlink_deps = _COMPILER_DEPS,
)

# The builder library.
kotlin_worker_lib(
    name = "builder_lib",
    srcs = glob(["src/io/bazel/kotlin/builder/**/*.kt"]),
    args = [
        "-jvm-target","1.8",
    ],
    deps = _COMMON_DEPS
)

# This is a hack so that the builder and compiler sources can be picked up by intellij.
kt_jvm_library(
    name = "for_ide",
    srcs = glob(["src/**/*.kt"]),
    visibility = ["//visibility:private"],
    deps = _COMMON_DEPS + _COMPILER_DEPS,
)

# The builder artifact.
java_binary(
    name = "builder",
    main_class = "io.bazel.kotlin.builder.KotlinBuilder",
    visibility = ["//visibility:public"],
    runtime_deps = [
        ":builder_lib",
    ],
    data = [
        ":compiler_lib.jar"
    ]
)

# This is defined so that tests can wire up a builder.
filegroup(
    name = "builder_runfiles_for_tests",
    srcs = [
        ":compiler_lib.jar",
        "@com_github_jetbrains_kotlin//:compiler",
        "@com_github_jetbrains_kotlin//:kotlin-annotation-processing",
        "@com_github_jetbrains_kotlin//:kotlin-script-runtime",
    ],
    testonly = 1,
    visibility = ["//visibility:private"],
)

java_library(
    name = "builder_for_tests",
    testonly = 1,
    exports = _COMMON_DEPS + [
        ":builder_lib",
        ":compiler_lib",
    ],
    data = [
        "builder_runfiles_for_tests"
    ]
)

java_test(
    name = "integrationtests",
    srcs = glob(["integrationtests/*.java"]),
    test_class = "io.bazel.kotlin.builder.KotlinBuilderTestSuite",
    deps = [
        "//kotlin/builder:builder_for_tests",
        "//third_party/jvm/com/google/truth",
        "//third_party/jvm/junit",
    ],
)

java_test(
    name = "unittests",
    size = "small",
    srcs = glob(["unittests/**/*.java"]),
    test_class = "io.bazel.kotlin.builder.mode.jvm.utils.JdepsParserTest",
    deps = [":builder_for_tests"],
)
