# Copyright (C) 2017 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.

package(default_visibility = ["//visibility:public"])

package_group(
    name = "src",
    packages = ["//..."],
)

load("@google_bazel_common//tools/javadoc:javadoc.bzl", "javadoc_library")

java_library(
    name = "dagger_with_compiler",
    exported_plugins = ["//java/dagger/internal/codegen:component-codegen"],
    exports = ["//java/dagger:core"],
)

java_library(
    name = "producers_with_compiler",
    exports = [
        ":dagger_with_compiler",
        "//java/dagger/producers",
    ],
)

android_library(
    name = "android",
    exported_plugins = ["//java/dagger/android/processor:plugin"],
    exports = ["//java/dagger/android"],
)

android_library(
    name = "android-support",
    exports = [
        ":android",
        "//java/dagger/android/support",
    ],
)

load("@google_bazel_common//tools/jarjar:jarjar.bzl", "jarjar_library")

SHADE_RULES = ["rule com.google.auto.common.** dagger.shaded.auto.common.@1"]

jarjar_library(
    name = "shaded_compiler",
    jars = [
        "//java/dagger/internal/codegen:base",
        "//java/dagger/internal/codegen:binding",
        "//java/dagger/internal/codegen:binding_graph_validation",
        "//java/dagger/internal/codegen:jdk-and-guava-extras",
        "//java/dagger/internal/codegen:processor",
        "//java/dagger/internal/codegen:validation",
        "//java/dagger/internal/codegen:writing",
        "//java/dagger/internal/codegen/javapoet",
        "//java/dagger/internal/codegen/langmodel",
        "//java/dagger/internal/codegen/serialization",
        "//java/dagger/model:internal-proxies",
        "//java/dagger/errorprone",
        "@com_google_auto_auto_common//jar",
    ],
    rules = SHADE_RULES,
)

jarjar_library(
    name = "shaded_compiler_src",
    jars = [
        "//java/dagger/internal/codegen:libbase-src.jar",
        "//java/dagger/internal/codegen:libbinding-src.jar",
        "//java/dagger/internal/codegen:libbinding_graph_validation-src.jar",
        "//java/dagger/internal/codegen:libjdk-and-guava-extras-src.jar",
        "//java/dagger/internal/codegen:libprocessor-src.jar",
        "//java/dagger/internal/codegen:libvalidation-src.jar",
        "//java/dagger/internal/codegen:libwriting-src.jar",
        "//java/dagger/internal/codegen/javapoet:libjavapoet-src.jar",
        "//java/dagger/internal/codegen/langmodel:liblangmodel-src.jar",
        # TODO(ronshapiro): is there a generated src.jar for protos in Bazel?
        "//java/dagger/errorprone:liberrorprone-src.jar",
    ],
)

jarjar_library(
    name = "shaded_spi",
    jars = [
        "//java/dagger/internal/codegen:jdk-and-guava-extras",
        "//java/dagger/model",
        "//java/dagger/spi",
        "@com_google_auto_auto_common//jar",
    ],
    rules = SHADE_RULES,
)

jarjar_library(
    name = "shaded_spi_src",
    jars = [
        "//java/dagger/internal/codegen:libjdk-and-guava-extras-src.jar",
        "//java/dagger/model:libmodel-src.jar",
        "//java/dagger/spi:libspi-src.jar",
    ],
)

javadoc_library(
    name = "spi-javadoc",
    srcs = [
        "//java/dagger/model:model-srcs",
        "//java/dagger/spi:spi-srcs",
    ],
    root_packages = [
        "dagger.model",
        "dagger.spi",
    ],
    deps = [
        "//java/dagger/model",
        "//java/dagger/spi",
    ],
)

jarjar_library(
    name = "shaded_android_processor",
    jars = [
        "//java/dagger/android/processor",
        "@com_google_auto_auto_common//jar",
    ],
    rules = SHADE_RULES,
)

jarjar_library(
    name = "shaded_grpc_server_processor",
    jars = [
        "//java/dagger/grpc/server/processor",
        "@com_google_auto_auto_common//jar",
    ],
    rules = SHADE_RULES,
)

# coalesced javadocs used for the gh-pages site
javadoc_library(
    name = "user-docs",
    srcs = [
        "//java/dagger:javadoc-srcs",
        "//java/dagger/android:android-srcs",
        "//java/dagger/android/support:support-srcs",
        "//java/dagger/grpc/server:javadoc-srcs",
        "//java/dagger/grpc/server/processor:javadoc-srcs",
        "//java/dagger/model:model-srcs",
        "//java/dagger/producers:producers-srcs",
        "//java/dagger/spi:spi-srcs",
    ],
    android_api_level = 26,
    # TODO(ronshapiro): figure out how to specify the version number for release builds
    doctitle = "Dagger Dependency Injection API",
    exclude_packages = [
        "dagger.internal",
        "dagger.producers.internal",
        "dagger.producers.monitoring.internal",
    ],
    root_packages = ["dagger"],
    deps = [
        "//java/dagger:core",
        "//java/dagger/android",
        "//java/dagger/android/support",
        "//java/dagger/grpc/server",
        "//java/dagger/grpc/server/processor",
        "//java/dagger/model",
        "//java/dagger/producers",
        "//java/dagger/spi",
    ],
)
