// Copyright (C) 2010 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.

package {
    default_applicable_licenses: ["external_guava_license"],
}

// Added automatically by a large-scale-change that took the approach of
// 'apply every license found to every target'. While this makes sure we respect
// every license restriction, it may not be entirely correct.
//
// e.g. GPL in an MIT project might only apply to the contrib/ directory.
//
// Please consider splitting the single license below into multiple licenses,
// taking care not to lose any license_kind information, and overriding the
// default license using the 'licenses: [...]' property on targets as needed.
//
// For unused files, consider creating a 'fileGroup' with "//visibility:private"
// to attach the license to, and including a comment whether the files may be
// used in the current project.
//
// large-scale-change included anything that looked like it might be a license
// text as a license_text. e.g. LICENSE, NOTICE, COPYING etc.
//
// Please consider removing redundant or irrelevant files from 'license_text:'.
// See: http://go/android-license-faq
license {
    name: "external_guava_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-Apache-2.0",
        "SPDX-license-identifier-CC0-1.0",
        "legacy_unencumbered",
    ],
    license_text: [
        "COPYING",
        "NOTICE",
    ],
}

java_library {
    name: "guava",
    host_supported: true,
    hostdex: true,
    sdk_version: "core_current",
    target: {
        android: {
            static_libs: ["guava-android"],
        },
        host: {
            static_libs: ["guava-jre"],
        },
    },
    apex_available: [
        "//apex_available:platform",
        "//apex_available:anyapex",
    ],
}

java_library {
    name: "guava-both",
    host_supported: true,
    sdk_version: "core_current",
    srcs: ["futures/failureaccess/**/*.java"],
    static_libs: ["jsr305"],
    libs: [
        "guava-android-annotation-stubs",
        "error_prone_annotations",
    ],
    java_version: "1.8",
}

java_library_host {
    name: "guava-jre",
    srcs: ["guava/src/**/*.java"],
    static_libs: ["guava-both"],
    libs: [
        "guava-android-annotation-stubs",
        "error_prone_annotations",
    ],
    java_version: "1.8",
}

java_library_host {
    name: "guava-testlib",
    srcs: ["guava-testlib/src/**/*.java"],
    libs: [
         "error_prone_annotations",
         "guava",
         "guava-android-annotation-stubs",
         "jsr305",
         "junit",
    ],
    java_version: "1.8",
}

// Guava for Android can't compile against an Android bootclasspath, compile
// it for the host and then use it on the device.  It uses reflection to
// prevent calling into methods that don't exist on Android.
java_library_host {
    name: "guava-android-host",
    srcs: ["android/guava/src/**/*.java"],
    static_libs: ["guava-both"],
    libs: [
        "guava-android-annotation-stubs",
        "error_prone_annotations",
    ],
    java_version: "1.8",
}

java_host_for_device {
    name: "guava-android",
    libs: ["guava-android-host"],
}

// Compatibility name for existing host modules
java_library_host {
    name: "guavalib",
    static_libs: ["guava"],
}

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

// Compile guava testlib
java_library {
    name: "guava-android-testlib",
    srcs: ["android/guava-testlib/src/**/*.java"],
    libs: [
        "error_prone_annotations",
        "guava-android",
        "guava-android-annotation-stubs",
        "junit",
    ],
}
