# Copyright (C) 2019 The Dagger Authors.
#
# 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.

# Description:
#   Sources related to compiler options.

load("@rules_java//java:defs.bzl", "java_library")

package(default_visibility = ["//:src"])

SHARED_SOURCES = [
    "ClearableCache.java",
    "MoreAnnotationMirrors.java",
    "MoreAnnotationValues.java",
]

java_library(
    name = "base",
    srcs = glob(
        ["*.java"],
        exclude = SHARED_SOURCES,
    ),
    plugins = ["//java/dagger/internal/codegen/bootstrap"],
    tags = ["maven:merged"],
    exports = [":shared"],
    deps = [
        ":shared",
        "//java/dagger:core",
        "//java/dagger/internal/codegen/extension",
        "//java/dagger/internal/codegen/javapoet",
        "//java/dagger/internal/codegen/langmodel",
        "//java/dagger/internal/guava:base",
        "//java/dagger/internal/guava:collect",
        "//java/dagger/internal/guava:concurrent",
        "//java/dagger/producers",
        "//java/dagger/spi",
        "@google_bazel_common//third_party/java/auto:value",
        "@google_bazel_common//third_party/java/javapoet",
        "@google_bazel_common//third_party/java/jsr330_inject",
        "@maven//:com_google_auto_auto_common",
    ],
)

# TODO(bcorso): Remove this target but first remove spi and producers from :base
java_library(
    name = "shared",
    srcs = SHARED_SOURCES,
    tags = ["maven:merged"],
    deps = [
        "//java/dagger/internal/codegen/extension",
        "//java/dagger/internal/guava:base",
        "//java/dagger/internal/guava:collect",
        "@maven//:com_google_auto_auto_common",
    ],
)
