// Copyright (C) 2015 The Android Open Source Project
//
// 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.

java_import_host {
    name: "dagger2-auto-common",
    jars: ["lib/auto-common-0.10.jar"],
}

java_import_host {
    name: "dagger2-auto-factory-jar",
    jars: ["lib/auto-factory-1.0-beta6.jar"],
}

java_plugin {
    name: "dagger2-auto-factory",
    processor_class: "com.google.auto.factory.processor.AutoFactoryProcessor",
    static_libs: [
        "dagger2-auto-factory-jar",
        "dagger2-auto-common",
        "guava",
        "javapoet",
        "dagger2-google-java-format",
    ],
}

java_import_host {
    name: "dagger2-auto-service-jar",
    jars: ["lib/auto-service-1.0-rc5.jar"],
}

java_import_host {
    name: "dagger2-auto-service-annotations",
    jars: ["lib/auto-service-annotations-1.0-rc5.jar"],
}

java_plugin {
    name: "dagger2-auto-service",
    processor_class: "com.google.auto.service.processor.AutoServiceProcessor",
    static_libs: [
        "dagger2-auto-common",
        "dagger2-auto-service-jar",
        "dagger2-auto-service-annotations",
        "guava",
    ],
}

java_import_host {
    name: "dagger2-auto-value-jar",
    jars: ["lib/auto-value-1.6.5.jar"],
}

java_import_host {
    name: "dagger2-auto-value-annotations",
    jars: ["lib/auto-value-annotations-1.6.5.jar"],
}

java_plugin {
    name: "dagger2-auto-value",
    processor_class: "com.google.auto.value.processor.AutoValueProcessor",
    static_libs: [
        "dagger2-auto-value-jar",
        "dagger2-auto-value-annotations",
    ],
}

java_plugin {
    name: "dagger2-auto-annotation",
    processor_class: "com.google.auto.value.processor.AutoAnnotationProcessor",
    static_libs: ["dagger2-auto-value-jar"],
}

java_import_host {
    name: "dagger2-google-java-format",
    jars: ["lib/google-java-format-1.7-all-deps.jar"],
}

java_import_host {
    name: "dagger2-inject",
    jars: ["lib/javax.inject-1.jar"],
}

java_import_host {
    name: "dagger2-bootstrap-compiler-jar",
    jars: ["java/dagger/internal/codegen/bootstrap_compiler_deploy.jar"],
}

java_plugin {
    name: "dagger2-bootstrap-compiler",
    processor_class: "dagger.internal.codegen.ComponentProcessor",
    generates_api: true,
    static_libs: ["dagger2-bootstrap-compiler-jar"],
}

java_library_host {
    name: "dagger2",

    srcs: [
        "java/dagger/*.java",
        "java/dagger/internal/*.java",
        "java/dagger/multibindings/*.java",
        "java/dagger/releasablereferences/*.java",
    ],
    exclude_srcs: ["java/dagger/android/**/*.java"],

    static_libs: ["dagger2-inject"],

    libs: ["guava"],

    java_version: "1.8",
}

// build dagger2 producers library
// ============================================================

java_library_host {
    name: "dagger2-producers",

    srcs: ["java/dagger/producers/**/*.java"],

    static_libs: [
        "dagger2-inject",
        "error_prone_annotations",
    ],

    libs: [
        "dagger2",
        "dagger2-android-annotation-stubs",
        "guava",
    ],

    java_version: "1.8",
}

// build dagger2 compiler plugin
// ============================================================

java_plugin {
    name: "dagger2-compiler",
    processor_class: "dagger.internal.codegen.ComponentProcessor",
    generates_api: true,
    use_tools_jar: true,

    srcs: [
        "java/dagger/internal/codegen/**/*.java",
        "java/dagger/internal/codegen/**/*.proto",

        "java/dagger/model/*.java",
        "java/dagger/spi/*.java",
    ],

    exclude_srcs: [
        "java/dagger/internal/codegen/BindingGraphStatisticsCollector.java",
        "java/dagger/internal/codegen/DaggerKythePlugin.java",
    ],

    // Manually include META-INF/services/javax.annotation.processing.Processor
    // as the AutoService processor doesn't work properly.
    java_resource_dirs: ["resources"],

    static_libs: [
        "dagger2",
        "dagger2-auto-common",
        "dagger2-auto-factory",
        "dagger2-auto-service",
        "dagger2-auto-value",
        "dagger2-google-java-format",
        "dagger2-inject",
        "dagger2-producers",
        "guava",
        "javapoet",
    ],

    // shade guava to avoid conflicts with guava embedded in Error Prone.
    jarjar_rules: "jarjar-rules.txt",

    libs: [
        "dagger2-android-annotation-stubs",
    ],

    plugins: [
        "dagger2-auto-factory",
        "dagger2-auto-service",
        "dagger2-auto-value",
        "dagger2-auto-annotation",
        "dagger2-bootstrap-compiler",
    ],

    proto: {
        type: "full",
        include_dirs: ["external/protobuf/src/"],
    },

    java_version: "1.8",
}

// Compile  dummy implementations of annotations used by dagger2 but not
// present in the Android tree.
java_library {
    name: "dagger2-android-annotation-stubs",
    host_supported: true,
    sdk_version: "core_current",
    srcs: ["android-annotation-stubs/src/**/*.java"],
}
