hook up Bazel's implicit dependencies for legacy java 8 support in //tools/android

PiperOrigin-RevId: 192509068
diff --git a/tools/android/BUILD b/tools/android/BUILD
index 4f1eb3c..e22f55d 100644
--- a/tools/android/BUILD
+++ b/tools/android/BUILD
@@ -179,6 +179,14 @@
     ],
 )
 
+genrule(
+    name = "desugar_jdk_libs",
+    srcs = ["@desugar_jdk_libs"],
+    outs = ["desugar_jdk_libs.jar"],
+    cmd = "cp $< $@",
+    visibility = ["//visibility:private"],
+)
+
 filegroup(
     name = "srcs",
     srcs = glob(["**"]) + ["//tools/android/emulator:srcs"],
@@ -192,7 +200,10 @@
             "*_test.py",
             "*_test.sh",
         ],
-    ) + ["//tools/android/emulator:embedded_tools"],
+    ) + [
+        ":desugar_jdk_libs.jar",
+        "//tools/android/emulator:embedded_tools",
+    ],
 )
 
 # Exported for AndroidSdkRepositoryTest to use it instead of mocking it out.
diff --git a/tools/android/BUILD.tools b/tools/android/BUILD.tools
index 4a12571..92ffa87 100644
--- a/tools/android/BUILD.tools
+++ b/tools/android/BUILD.tools
@@ -129,26 +129,114 @@
     visibility = ["//visibility:private"],
 )
 
-filegroup(
+java_import(
     name = "desugared_java8_legacy_apis",
-    srcs = [],  # TODO(b/70681189): Populate with ijars
+    jars = [":ijar_desugared_java8_legacy_libs"],
+    neverlink = 1,
     visibility = ["//visibility:public"],
 )
 
+genrule(
+    name = "ijar_desugared_java8_legacy_libs",
+    srcs = ["desugared_java8_legacy_libs"],
+    outs = ["desugared_java8_legacy_libs-ijar.jar"],
+    cmd = "$(location //third_party/ijar) $< $@",
+    tools = ["//third_party/ijar"],
+    visibility = ["//visibility:private"],
+)
+
 sh_binary(
     name = "build_java8_legacy_dex",
-    srcs = ["fail.sh"],
+    srcs = ["build_java8_legacy_dex.sh"],
+    data = [":java8_legacy_dex"],
     visibility = ["//visibility:public"],
 )
 
 genrule(
     name = "java8_legacy_dex",
+    srcs = ["desugared_java8_legacy_libs"],
     outs = ["java8_legacy.dex.zip"],
-    cmd = "$(location :build_java8_legacy_dex) --output $@",
-    tools = [":build_java8_legacy_dex"],
+    cmd = """$(location :dexer) --dex "--output=$@" $<""",
+    tools = [":dexer"],
     visibility = ["//visibility:public"],
 )
 
+filegroup(
+    name = "desugared_java8_legacy_libs",
+    srcs = ["desugared_java8_legacy_libs.jar"],
+    visibility = ["//visibility:private"],
+)
+
+genrule(
+    name = "desugar_java8_legacy_libs",
+    srcs = ["desugar_jdk_libs.jar"],
+    outs = ["desugared_java8_legacy_libs.jar"],
+    cmd = """
+    classpath=()
+    for j in $(locations //tools/jdk:bootclasspath); do
+      classpath+=("--classpath_entry")
+      classpath+=("$${j}")
+    done
+    $(location :desugar_java8) \
+        --input $< \
+        --output $@ \
+        "$${classpath[@]}" \
+        --core_library --allow_empty_bootclasspath \
+        --nobest_effort_tolerate_missing_deps \
+        --noemit_dependency_metadata_as_needed \
+        --nodesugar_try_with_resources_if_needed \
+        --desugar_supported_core_libs \
+        --rewrite_core_library_prefix java/lang/Double8 \
+        --rewrite_core_library_prefix java/lang/Integer8 \
+        --rewrite_core_library_prefix java/lang/Long8 \
+        --rewrite_core_library_prefix java/lang/Math8 \
+        --rewrite_core_library_prefix java/time/ \
+        --rewrite_core_library_prefix java/util/stream/ \
+        --rewrite_core_library_prefix java/util/function/ \
+        --rewrite_core_library_prefix java/util/Arrays8 \
+        --rewrite_core_library_prefix java/util/Comparators \
+        --rewrite_core_library_prefix java/util/DoubleSummaryStatistics \
+        --rewrite_core_library_prefix java/util/IntSummaryStatistics \
+        --rewrite_core_library_prefix java/util/LinkedHashSet8 \
+        --rewrite_core_library_prefix java/util/LongSummaryStatistics \
+        --rewrite_core_library_prefix java/util/Objects \
+        --rewrite_core_library_prefix java/util/Optional \
+        --rewrite_core_library_prefix java/util/PrimitiveIterator \
+        --rewrite_core_library_prefix java/util/SortedSet\$$1 \
+        --rewrite_core_library_prefix java/util/Spliterator \
+        --rewrite_core_library_prefix java/util/StringJoiner \
+        --rewrite_core_library_prefix java/util/TimeZone8 \
+        --rewrite_core_library_prefix java/util/Tripwire \
+        --retarget_core_library_member "java/util/Arrays#stream->java/util/Arrays8" \
+        --retarget_core_library_member "java/util/Arrays#spliterator->java/util/Arrays8" \
+        --retarget_core_library_member "java/util/LinkedHashSet#spliterator->java/util/LinkedHashSet8" \
+        --emulate_core_library_interface java/util/Collection \
+        --emulate_core_library_interface java/util/Map \
+        --emulate_core_library_interface java/util/Map\$$Entry \
+        --emulate_core_library_interface java/util/Iterator \
+        --emulate_core_library_interface java/util/Comparator \
+        --dont_rewrite_core_library_invocation "java/util/Iterator#remove" """,
+    tools = [
+        ":desugar_java8",
+        "//tools/jdk:bootclasspath",
+    ],
+    visibility = ["//visibility:private"],
+)
+
+# No-one should depend on this but :desugared_java8_legacy_libs above
+exports_files(["desugar_jdk_libs.jar"],
+    visibility = ["//visibility:private"],
+)
+
+# Mirrors @<repo>//:dx_binary generated by android_sdk_repository rule without
+# needing the SDK repo's name (typically @androidsdk but not required).
+java_binary(
+    name = "dexer",
+    main_class = "com.android.dx.command.Main",
+    runtime_deps = ["//external:android/dx_jar_import"],
+    visibility = ["//visibility:private"],
+)
+
 alias(
     name = "IdlClass",
     actual = "//src/tools/android/java/com/google/devtools/build/android/idlclass:IdlClass",
diff --git a/tools/android/build_java8_legacy_dex.sh b/tools/android/build_java8_legacy_dex.sh
new file mode 100644
index 0000000..7ceaea8
--- /dev/null
+++ b/tools/android/build_java8_legacy_dex.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+# 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
+
+set -eu
+
+android_jar=
+binary_jar=
+dest=
+while [[ "$#" -gt 0 ]]; do
+  arg="$1"; shift;
+  case "${arg}" in
+    --binary) binary_jar="$1"; shift ;;
+    --binary=*) binary_jar="${arg:9}" ;;
+    --output) dest="$1"; shift ;;
+    --output=*) dest="${arg:9}" ;;
+    --android_jar) android_jar="$1"; shift ;;
+    --android_jar=*) android_jar="${arg:14}" ;;
+    *) echo "Unknown flag: ${arg}"; exit 1 ;;
+  esac
+done
+
+# TODO(b/77339644): Support minification
+cp "$(dirname "$0")/java8_legacy.dex.zip" "${dest}"