aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/android/desugar/BUILD
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/google/devtools/build/android/desugar/BUILD')
-rw-r--r--src/test/java/com/google/devtools/build/android/desugar/BUILD1776
1 files changed, 1776 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/android/desugar/BUILD b/src/test/java/com/google/devtools/build/android/desugar/BUILD
new file mode 100644
index 0000000000..6d0187ef1c
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/android/desugar/BUILD
@@ -0,0 +1,1776 @@
+# Description:
+# Tests for the Java 8 desugaring tool for Android.
+package(
+ default_testonly = 1,
+ default_visibility = ["//src/test/java/com/google/devtools/build/android/desugar:__subpackages__"],
+)
+
+licenses(["notice"]) # Apache 2.0
+
+filegroup(
+ name = "srcs",
+ testonly = 0,
+ srcs = glob(["**"]) + [
+ "//src/test/java/com/google/devtools/build/android/desugar/runtime:srcs",
+ ],
+ visibility = ["//src/test/java/com/google/devtools/build/android:__pkg__"],
+)
+
+filegroup(
+ name = "android_jar_for_testing",
+ srcs = select({
+ # TODO(ajmichael): Use //tools/defaults:android_jar here once it supplies runfiles.
+ "//external:has_androidsdk": ["@androidsdk//:platforms/android-25/android.jar"],
+ "//conditions:default": ["@bazel_tools//tools/android:error_message.jar"],
+ }),
+)
+
+java_test(
+ name = "DesugarFunctionalTest",
+ size = "small",
+ srcs = [
+ "DesugarFunctionalTest.java",
+ ],
+ tags = ["no_windows"],
+ deps = [
+ ":testdata_desugared", # Make tests run against desugared library
+ "//third_party:asm",
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarIdempotencyFunctionalTest",
+ size = "small",
+ srcs = [
+ "DesugarFunctionalTest.java",
+ ],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarFunctionalTest",
+ deps = [
+ ":testdata_desugared_twice", # Make tests run against twice-desugared library
+ "//third_party:asm",
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+# Test for b/62456849. If a synthetic method is named "lambda$XXX", but not used in invokedynamic,
+# then Desugar should keep it in the class, rather than renaming it.
+java_test(
+ name = "DesugarFunctionalTestForSyntheticMethodsWithLambdaNames",
+ size = "small",
+ srcs = [
+ "DesugarFunctionalTest.java",
+ ],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarFunctionalTest",
+ deps = [
+ ":desugar_testdata_with_synthetic_methods_with_lambda_names",
+ ":separate",
+ "//third_party:asm",
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarLongCompareTest",
+ size = "small",
+ srcs = [
+ "DesugarLongCompareTest.java",
+ ],
+ tags = ["no_windows"],
+ deps = [
+ ":testdata_desugared", # Make tests run against desugared library
+ "//third_party:asm",
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarObjectsRequireNonNullTest",
+ size = "small",
+ srcs = [
+ "DesugarObjectsRequireNonNullTest.java",
+ ],
+ tags = ["no_windows"],
+ deps = [
+ ":testdata_desugared", # Make tests run against desugared library
+ "//third_party:asm",
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarObjectsRequireNonNullTestForAndroidLintMode",
+ size = "small",
+ srcs = ["DesugarObjectsRequireNonNullTest.java"],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarObjectsRequireNonNullTest",
+ deps = [
+ ":desugar_testdata_by_disabling_lambda_desugaring", # Make tests run against desugared library
+ "//third_party:asm",
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarJava8FunctionalTest",
+ size = "small",
+ srcs = [
+ "DesugarFunctionalTest.java",
+ "DesugarJava8FunctionalTest.java",
+ ],
+ tags = ["no_windows"],
+ deps = [
+ ":testdata_desugared_java8", # Make tests run against desugared library
+ "//src/test/java/com/google/devtools/build/lib:testutil",
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarJava8LikeAndroidStudioFunctionalTest",
+ size = "small",
+ srcs = [
+ "DesugarFunctionalTest.java",
+ "DesugarJava8FunctionalTest.java",
+ "DesugarJava8LikeAndroidStudioFunctionalTest.java",
+ ],
+ tags = ["no_windows"],
+ deps = [
+ ":libseparate.jar",
+ ":testdata_desugared_java8_like_in_android_studio.jar", # Make tests run against desugared library
+ "//src/test/java/com/google/devtools/build/lib:testutil",
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarDefaultMethodsFunctionalTest",
+ size = "small",
+ srcs = [
+ "DesugarDefaultMethodsFunctionalTest.java",
+ "DesugarFunctionalTest.java",
+ "DesugarJava8FunctionalTest.java",
+ ],
+ tags = ["no_windows"],
+ deps = [
+ ":testdata_desugared_default_methods", # Make tests run against desugared library
+ "//src/test/java/com/google/devtools/build/lib:testutil",
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarDefaultMethodsIdempotencyFunctionalTest",
+ size = "small",
+ srcs = [
+ "DesugarDefaultMethodsFunctionalTest.java",
+ "DesugarFunctionalTest.java",
+ "DesugarJava8FunctionalTest.java",
+ ],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarDefaultMethodsFunctionalTest",
+ deps = [
+ ":testdata_desugared_default_methods_twice", # Make tests run against 2x desugared library
+ "//src/test/java/com/google/devtools/build/lib:testutil",
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarLikeAndroidStudioFunctionalTest",
+ size = "small",
+ srcs = [
+ "DesugarFunctionalTest.java",
+ ],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarFunctionalTest",
+ deps = [
+ ":testdata_desugared_like_in_android_studio", # Make tests run against desugared library
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarFunctionalTestWithMultipleInputs",
+ size = "small",
+ srcs = [
+ "DesugarFunctionalTest.java",
+ ],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarFunctionalTest",
+ deps = [
+ ":testdata_desugared_with_multiple_inputs", # Make tests run against desugared library
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarFunctionalTestFromDirectoryToJar",
+ size = "small",
+ srcs = [
+ "DesugarFunctionalTest.java",
+ ],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarFunctionalTest",
+ deps = [
+ ":testdata_desugared_from_directory_to_jar", # Make tests run against desugared library
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarFunctionalTestFromDirectoryToDirectory",
+ size = "small",
+ srcs = [
+ "DesugarFunctionalTest.java",
+ ],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarFunctionalTest",
+ deps = [
+ ":testdata_desugared_from_directory_to_directory", # Make tests run against desugared library
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarFunctionalTestWithClasspathDirectory",
+ size = "small",
+ srcs = [
+ "DesugarFunctionalTest.java",
+ ],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarFunctionalTest",
+ deps = [
+ ":testdata_desugared_with_classpath_directory", # Make tests run against desugared library
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarCoreLibraryFunctionalTest",
+ size = "small",
+ srcs = [
+ "DesugarCoreLibraryFunctionalTest.java",
+ ],
+ jvm_flags = ["-Xbootclasspath/p:$(location :testdata_desugared_core_library):$(location //third_party/java/jacoco:blaze-agent)"],
+ tags = ["no_windows"],
+ deps = [
+ ":testdata_desugared_core_library", # Make tests run against desugared library
+ "//third_party:guava",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ # Depend on Jacoco runtime in case :testdata was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ ],
+)
+
+java_test(
+ name = "StackMapBugTest",
+ size = "small",
+ srcs = [
+ "StackMapBugTest.java",
+ ],
+ jvm_flags = ["-Xbootclasspath/p:$(location //third_party/java/jacoco:blaze-agent)"],
+ tags = ["no_windows"],
+ deps = [
+ ":testdata_desugared_core_library", # Make tests run against desugared library
+ "//third_party:guava",
+ "//third_party:junit4",
+ "//third_party:truth",
+ # Depend on Jacoco runtime in case :testdata was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ ],
+)
+
+java_test(
+ name = "DefaultMethodClassFixerTest",
+ size = "small",
+ srcs = ["DefaultMethodClassFixerTest.java"],
+ data = [
+ ":android_jar_for_testing",
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":testdata_java8",
+ ],
+ jvm_flags = [
+ "-DDefaultMethodClassFixerTest.bootclasspath=$(location :android_jar_for_testing)",
+ "-DDefaultMethodClassFixerTest.classpath=$(location :separate):$(location :guava_base_classpath.jar):$(location //third_party/java/jacoco:blaze-agent)",
+ "-DDefaultMethodClassFixerTest.input=$(location :testdata_java8)",
+ ],
+ tags = ["no_windows"],
+ deps = [
+ "//src/tools/android/java/com/google/devtools/build/android/desugar",
+ "//third_party:asm",
+ "//third_party:asm-tree",
+ "//third_party:guava",
+ "//third_party:junit4",
+ "//third_party:truth",
+ "//third_party/java/jacoco:blaze-agent",
+ ],
+)
+
+java_test(
+ name = "MethodInfoTest",
+ size = "small",
+ srcs = ["MethodInfoTest.java"],
+ tags = ["no_windows"],
+ deps = [
+ "//src/tools/android/java/com/google/devtools/build/android/desugar",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "FieldInfoTest",
+ size = "small",
+ srcs = ["FieldInfoTest.java"],
+ tags = ["no_windows"],
+ deps = [
+ "//src/tools/android/java/com/google/devtools/build/android/desugar",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "Java7CompatibilityTest",
+ size = "small",
+ srcs = ["Java7CompatibilityTest.java"],
+ tags = ["no_windows"],
+ deps = [
+ "//src/tools/android/java/com/google/devtools/build/android/desugar",
+ "//third_party:asm",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "IndexedInputsTest",
+ size = "small",
+ srcs = ["IndexedInputsTest.java"],
+ tags = ["no_windows"],
+ deps = [
+ "//src/tools/android/java/com/google/devtools/build/android/desugar",
+ "//third_party:guava",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "TryWithResourcesRewriterUnitTestWithReuseStrategy",
+ size = "small",
+ srcs = [
+ "TryWithResourcesRewriterTest.java",
+ ],
+ jvm_flags = [
+ "-Dfortest.simulated.android.sdk_int=19",
+ "'-Dexpected.strategy=com.google.devtools.build.android.desugar.runtime.ThrowableExtension$$ReuseDesugaringStrategy'",
+ ],
+ test_class = "com.google.devtools.build.android.desugar.TryWithResourcesRewriterTest",
+ deps = [
+ ":mocked_android_os_sdk_for_testing",
+ ":testdata",
+ "//src/test/java/com/google/devtools/build/android/desugar/runtime:throwable_extension_test_utility",
+ "//src/tools/android/java/com/google/devtools/build/android/desugar",
+ "//src/tools/android/java/com/google/devtools/build/android/desugar/runtime:throwable_extension",
+ "//third_party:asm",
+ "//third_party:guava",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "TryWithResourcesRewriterUnitTestWithMimicStrategy",
+ size = "small",
+ srcs = [
+ "TryWithResourcesRewriterTest.java",
+ ],
+ jvm_flags = [
+ "-Dfortest.simulated.android.sdk_int=18",
+ "'-Dexpected.strategy=com.google.devtools.build.android.desugar.runtime.ThrowableExtension$$MimicDesugaringStrategy'",
+ ],
+ test_class = "com.google.devtools.build.android.desugar.TryWithResourcesRewriterTest",
+ deps = [
+ ":mocked_android_os_sdk_for_testing",
+ ":testdata",
+ "//src/test/java/com/google/devtools/build/android/desugar/runtime:throwable_extension_test_utility",
+ "//src/tools/android/java/com/google/devtools/build/android/desugar",
+ "//src/tools/android/java/com/google/devtools/build/android/desugar/runtime:throwable_extension",
+ "//third_party:asm",
+ "//third_party:guava",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "TryWithResourcesRewriterUnitTestWithNullStrategy",
+ size = "small",
+ srcs = [
+ "TryWithResourcesRewriterTest.java",
+ ],
+ jvm_flags = [
+ "-Dfortest.simulated.android.sdk_int=18",
+ "-Dcom.google.devtools.build.android.desugar.runtime.twr_disable_mimic=true",
+ "'-Dexpected.strategy=com.google.devtools.build.android.desugar.runtime.ThrowableExtension$$NullDesugaringStrategy'",
+ ],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.TryWithResourcesRewriterTest",
+ deps = [
+ ":mocked_android_os_sdk_for_testing",
+ ":testdata",
+ "//src/test/java/com/google/devtools/build/android/desugar/runtime:throwable_extension_test_utility",
+ "//src/tools/android/java/com/google/devtools/build/android/desugar",
+ "//src/tools/android/java/com/google/devtools/build/android/desugar/runtime:throwable_extension",
+ "//third_party:asm",
+ "//third_party:guava",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+# This test sets the lambda dump directory via the system property in the command line
+# (i.e., jvm_flags). So the dump directory is expected to succeed.
+java_test(
+ name = "DesugarMainCLassTestLambdaDirectoryCorrectlySet",
+ size = "small",
+ srcs = ["DesugarMainClassTest.java"],
+ jvm_flags = ["-Djdk.internal.lambda.dumpProxyClasses=$$(mktemp -d)"],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarMainClassTest",
+ deps = [
+ "//src/tools/android/java/com/google/devtools/build/android/desugar",
+ "//third_party:guava",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+# Different from the test target above, this test does not set the lambda dump directory in the
+# command line. Instead, it sets the system property in the test code, which is expected to fail.
+java_test(
+ name = "DesugarMainCLassTestLambdaDirectoryIncorrectlySet",
+ size = "small",
+ srcs = ["DesugarMainClassTest.java"],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarMainClassTest",
+ deps = [
+ "//src/tools/android/java/com/google/devtools/build/android/desugar",
+ "//third_party:guava",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+sh_test(
+ name = "testdata_desugared_jar_test",
+ size = "small",
+ srcs = ["testdata_desugared_jar_test.sh"],
+ args = [
+ "$(location testdata_desugared.jar)",
+ "$(location testdata_desugared_jar_toc_golden.txt)",
+ "$(JAVABASE)",
+ ],
+ data = [
+ "testdata_desugared.jar",
+ "testdata_desugared_jar_toc_golden.txt", # Golden file
+ "@bazel_tools//tools/jdk",
+ ],
+ tags = ["no_windows"],
+)
+
+# Make sure desugaring twice doesn't add any files
+sh_test(
+ name = "testdata_desugared_twice_jar_test",
+ size = "small",
+ srcs = ["testdata_desugared_jar_test.sh"],
+ args = [
+ "$(location testdata_desugared_twice.jar)",
+ "$(location testdata_desugared_jar_toc_golden.txt)",
+ "$(JAVABASE)",
+ ],
+ data = [
+ "testdata_desugared_jar_toc_golden.txt",
+ "testdata_desugared_twice.jar",
+ "@bazel_tools//tools/jdk",
+ ],
+ tags = ["no_windows"],
+)
+
+sh_test(
+ name = "testdata_desugared_java8_jar_test",
+ size = "small",
+ srcs = ["testdata_desugared_jar_test.sh"],
+ args = [
+ "$(location testdata_desugared_java8.jar)",
+ "$(location testdata_desugared_java8_jar_toc_golden.txt)",
+ "$(JAVABASE)",
+ ],
+ data = [
+ "testdata_desugared_java8.jar",
+ "testdata_desugared_java8_jar_toc_golden.txt", # Golden file
+ "@bazel_tools//tools/jdk",
+ ],
+ tags = ["no_windows"],
+)
+
+# TODO(b/37110951): Add jar content test for desugared default methods that works with coverage on
+
+sh_test(
+ name = "testdata_desugared_core_library_jar_test",
+ size = "small",
+ srcs = ["testdata_desugared_jar_test.sh"],
+ args = [
+ "$(location testdata_desugared_core_library.jar)",
+ "$(location testdata_desugared_core_library_jar_toc_golden.txt)",
+ "$(JAVABASE)",
+ ],
+ data = [
+ "testdata_desugared_core_library.jar",
+ "testdata_desugared_core_library_jar_toc_golden.txt", # Golden file
+ "@bazel_tools//tools/jdk",
+ ],
+ tags = ["no_windows"],
+)
+
+sh_test(
+ name = "testdata_desugared_for_try_with_resources_test",
+ size = "small",
+ srcs = ["testdata_desugared_jar_test.sh"],
+ args = [
+ "$(location testdata_desugared_for_try_with_resources.jar)",
+ "$(location testdata_desugared_for_try_with_resources_jar_toc_golden.txt)",
+ "$(JAVABASE)",
+ ],
+ data = [
+ "testdata_desugared_for_try_with_resources.jar",
+ "testdata_desugared_for_try_with_resources_jar_toc_golden.txt", # Golden file
+ "@bazel_tools//tools/jdk",
+ ],
+ tags = ["no_windows"],
+)
+
+sh_test(
+ name = "testdata_desugared_for_try_with_resources_test_twice",
+ size = "small",
+ srcs = ["testdata_desugared_jar_test.sh"],
+ args = [
+ "$(location testdata_desugared_for_try_with_resources_twice.jar)",
+ "$(location testdata_desugared_for_try_with_resources_jar_toc_golden.txt)",
+ "$(JAVABASE)",
+ ],
+ data = [
+ "testdata_desugared_for_try_with_resources_jar_toc_golden.txt", # Golden file
+ "testdata_desugared_for_try_with_resources_twice.jar",
+ "@bazel_tools//tools/jdk",
+ ],
+ tags = ["no_windows"],
+)
+
+# Test for b/63900665
+sh_test(
+ name = "testdata_desugared_for_disabling_try_with_resources_with_large_minsdkversion_test",
+ size = "small",
+ srcs = ["testdata_desugared_jar_test.sh"],
+ args = [
+ "$(location testdata_desugared_for_NO_desugaring_try_with_resources.jar)",
+ "$(location testdata_desugared_for_disabling_twr_with_large_minsdkversion_jar_toc_golden.txt)",
+ "$(JAVABASE)",
+ ],
+ data = [
+ "testdata_desugared_for_NO_desugaring_try_with_resources.jar",
+ "testdata_desugared_for_disabling_twr_with_large_minsdkversion_jar_toc_golden.txt", # Golden file
+ "@bazel_tools//tools/jdk",
+ ],
+ tags = ["no_windows"],
+)
+
+# Test for b/62047432
+sh_test(
+ name = "initializer_of_functional_interface_should_not_execute",
+ size = "small",
+ srcs = ["static_initializer_of_functional_interface_should_not_execute.sh"],
+ args = [
+ "$(location :desugar_testdata_with_default_methods_for_static_initializer_test) ",
+ ],
+ data = [
+ ":desugar_testdata_with_default_methods_for_static_initializer_test",
+ ],
+ tags = ["no_windows"],
+)
+
+java_library(
+ name = "testdata",
+ srcs = glob(["testdata/*.java"]),
+ resources = ["testdata/testresource.txt"],
+ deps = [
+ ":separate",
+ "//third_party:guava",
+ ],
+)
+
+java_library(
+ name = "testdata_java8",
+ srcs = glob([
+ "testdata/*.java",
+ "testdata/java8/**/*.java",
+ ]),
+ resources = ["testdata/testresource.txt"],
+ deps = [
+ ":separate",
+ "//third_party:guava",
+ ],
+)
+
+java_library(
+ name = "testdata_core_library",
+ srcs = glob([
+ "testdata/core_library/**/*.java",
+ ]),
+ resources = ["testdata/testresource.txt"],
+ deps = [
+ "//third_party:error_prone",
+ "//third_party:guava",
+ ],
+)
+
+java_library(
+ name = "separate",
+ srcs = glob(["testdata/separate/*.java"]),
+)
+
+java_library(
+ name = "testdata_like_in_android_studio",
+ srcs = glob(["testdata/*.java"]),
+ resources = ["testdata/testresource.txt"],
+ deps = [
+ ":libseparate.jar", # puts full Jar instead of header Jar on the classpath
+ "//third_party:guava",
+ ],
+)
+
+java_library(
+ name = "testdata_java8_like_in_android_studio",
+ srcs = glob([
+ "testdata/*.java",
+ "testdata/java8/**/*.java",
+ ]),
+ resources = ["testdata/testresource.txt"],
+ deps = [
+ ":libseparate.jar", # puts full Jar instead of header Jar on the classpath
+ "//third_party:guava",
+ ],
+)
+
+# The golden file for this target should NEVER contain generated lambda classes.
+sh_test(
+ name = "desugar_testdata_by_disabling_lambda_desugaring_test",
+ size = "small",
+ srcs = ["testdata_desugared_jar_test.sh"],
+ args = [
+ "$(location testdata_desugared_without_lambda_desugared.jar)",
+ "$(location testdata_desugared_without_lambda_desugared_jar_toc_golden.txt)",
+ "$(JAVABASE)",
+ ],
+ data = [
+ "testdata_desugared_without_lambda_desugared.jar",
+ "testdata_desugared_without_lambda_desugared_jar_toc_golden.txt", # Golden file
+ "@bazel_tools//tools/jdk",
+ ],
+ tags = ["no_windows"],
+)
+
+# The following genrules run the code tested here as a build tool. While that's
+# very similar to how Blaze will invoke it natively, the downside is that
+# running the tested tool in a genrule doesn't contribute code coverage
+# information for the tested tool. Note that the code in :testdata doesn't
+# appear in coverage reports when depending on this target regardless because
+# the needed metadata doesn't survive these genrules.
+genrule(
+ name = "desugar_testdata",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":testdata",
+ # Depend on Jacoco runtime in case :testdata was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["testdata_desugared.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "--nodesugar_interface_method_bodies_if_needed -i $(location :testdata) -o $@ " +
+ "--classpath_entry $(location :separate) " +
+ "--classpath_entry $(location :guava_base_classpath.jar) " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar)",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+# Convert human-written methods whose names start with "lambda$XXX" to synthetic methods, so we can
+# test for b/62456849.
+genrule(
+ name = "generate_synthetic_methods_with_lambda_names_in_test_data",
+ srcs = [":testdata"],
+ outs = ["testdata_with_generated_synthetic_methods_with_lambda_names.jar"],
+ cmd = "$(location :generate_synthetic_method_with_lambda_name_convention) " +
+ " $(location :testdata) " +
+ " $@ ",
+ tags = ["no_windows"],
+ tools = [":generate_synthetic_method_with_lambda_name_convention"],
+)
+
+# Desugar the test data for b/62456849
+genrule(
+ name = "desugar_testdata_with_synthetic_methods_with_lambda_names",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":generate_synthetic_methods_with_lambda_names_in_test_data",
+ # Depend on Jacoco runtime in case :testdata was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["testdata_desugared_with_synthetic_methods_with_lambda_names.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "--nodesugar_interface_method_bodies_if_needed -i $(location :generate_synthetic_methods_with_lambda_names_in_test_data) -o $@ " +
+ "--classpath_entry $(location :separate) " +
+ "--classpath_entry $(location :guava_base_classpath.jar) " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar)",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+genrule(
+ name = "desugar_testdata_again",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":testdata_desugared.jar",
+ # Depend on Jacoco runtime in case :testdata was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["testdata_desugared_twice.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "--nodesugar_interface_method_bodies_if_needed -i $(location :testdata_desugared.jar) -o $@ " +
+ "--classpath_entry $(location :separate) " +
+ "--classpath_entry $(location :guava_base_classpath.jar) " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar)",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+# This target tests the flag --allow_desugaring_lambda_for_lint=true, which is introduced to solve
+# the incompatibility issue with Android Lint. When the issue is addressed, this target and the
+# flag will be removed.
+genrule(
+ name = "desugar_testdata_by_disabling_lambda_desugaring",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":testdata",
+ # Depend on Jacoco runtime in case :testdata was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["testdata_desugared_without_lambda_desugared.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "--min_sdk_version 17 -i $(location :testdata) -o $@ " +
+ "--nodesugar_try_with_resources_if_needed " +
+ "--classpath_entry $(location :separate) " +
+ "--classpath_entry $(location :guava_base_classpath.jar) " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar) " +
+ "--only_desugar_javac9_for_lint",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+java_test(
+ name = "DesugarTryWithResourcesFunctionalTestWithNullStrategy",
+ size = "small",
+ srcs = [
+ "DesugarTryWithResourcesFunctionalTest.java",
+ ],
+ jvm_flags = [
+ "-Dfortest.simulated.android.sdk_int=18",
+ "-Dcom.google.devtools.build.android.desugar.runtime.twr_disable_mimic=true",
+ "'-Dexpected.strategy=com.google.devtools.build.android.desugar.runtime.ThrowableExtension$$NullDesugaringStrategy'",
+ ],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarTryWithResourcesFunctionalTest",
+ deps = [
+ "mocked_android_os_sdk_for_testing",
+ ":desugar_testdata_by_desugaring_try_with_resources",
+ "//src/test/java/com/google/devtools/build/android/desugar/runtime:throwable_extension_test_utility",
+ "//third_party:asm",
+ "//third_party:guava",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarTryWithResourcesFunctionalTestWithNullStrategyTwice",
+ size = "small",
+ srcs = [
+ "DesugarTryWithResourcesFunctionalTest.java",
+ ],
+ jvm_flags = [
+ "-Dfortest.simulated.android.sdk_int=18",
+ "-Dcom.google.devtools.build.android.desugar.runtime.twr_disable_mimic=true",
+ "'-Dexpected.strategy=com.google.devtools.build.android.desugar.runtime.ThrowableExtension$$NullDesugaringStrategy'",
+ ],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarTryWithResourcesFunctionalTest",
+ deps = [
+ "mocked_android_os_sdk_for_testing",
+ ":desugar_testdata_by_desugaring_try_with_resources_twice", # the lib desugared twice
+ "//src/test/java/com/google/devtools/build/android/desugar/runtime:throwable_extension_test_utility",
+ "//third_party:asm",
+ "//third_party:guava",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarTryWithResourcesFunctionalTestWithMimicStrategy",
+ size = "small",
+ srcs = [
+ "DesugarTryWithResourcesFunctionalTest.java",
+ ],
+ jvm_flags = [
+ "-Dfortest.simulated.android.sdk_int=18",
+ "'-Dexpected.strategy=com.google.devtools.build.android.desugar.runtime.ThrowableExtension$$MimicDesugaringStrategy'",
+ ],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarTryWithResourcesFunctionalTest",
+ deps = [
+ ":desugar_testdata_by_desugaring_try_with_resources",
+ ":mocked_android_os_sdk_for_testing",
+ "//src/test/java/com/google/devtools/build/android/desugar/runtime:throwable_extension_test_utility",
+ "//third_party:asm",
+ "//third_party:guava",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarTryWithResourcesFunctionalTestWithMimicStrategyTwice",
+ size = "small",
+ srcs = [
+ "DesugarTryWithResourcesFunctionalTest.java",
+ ],
+ jvm_flags = [
+ "-Dfortest.simulated.android.sdk_int=18",
+ "'-Dexpected.strategy=com.google.devtools.build.android.desugar.runtime.ThrowableExtension$$MimicDesugaringStrategy'",
+ ],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarTryWithResourcesFunctionalTest",
+ deps = [
+ ":desugar_testdata_by_desugaring_try_with_resources_twice", # the lib desugared twice.
+ ":mocked_android_os_sdk_for_testing",
+ "//src/test/java/com/google/devtools/build/android/desugar/runtime:throwable_extension_test_utility",
+ "//third_party:asm",
+ "//third_party:guava",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarTryWithResourcesFunctionalTestWithReuseStrategy",
+ size = "small",
+ srcs = [
+ "DesugarTryWithResourcesFunctionalTest.java",
+ ],
+ jvm_flags = [
+ "-Dfortest.simulated.android.sdk_int=19",
+ "'-Dexpected.strategy=com.google.devtools.build.android.desugar.runtime.ThrowableExtension$$ReuseDesugaringStrategy'",
+ ],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarTryWithResourcesFunctionalTest",
+ deps = [
+ ":desugar_testdata_by_desugaring_try_with_resources",
+ ":mocked_android_os_sdk_for_testing",
+ "//src/test/java/com/google/devtools/build/android/desugar/runtime:throwable_extension_test_utility",
+ "//third_party:asm",
+ "//third_party:guava",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_test(
+ name = "DesugarTryWithResourcesFunctionalTestWithReuseStrategyTwice",
+ size = "small",
+ srcs = [
+ "DesugarTryWithResourcesFunctionalTest.java",
+ ],
+ jvm_flags = [
+ "-Dfortest.simulated.android.sdk_int=19",
+ "'-Dexpected.strategy=com.google.devtools.build.android.desugar.runtime.ThrowableExtension$$ReuseDesugaringStrategy'",
+ ],
+ tags = ["no_windows"],
+ test_class = "com.google.devtools.build.android.desugar.DesugarTryWithResourcesFunctionalTest",
+ deps = [
+ ":desugar_testdata_by_desugaring_try_with_resources_twice", # the lib desugared twice.
+ ":mocked_android_os_sdk_for_testing",
+ "//src/test/java/com/google/devtools/build/android/desugar/runtime:throwable_extension_test_utility",
+ "//third_party:asm",
+ "//third_party:guava",
+ "//third_party:junit4",
+ "//third_party:truth",
+ ],
+)
+
+java_library(
+ name = "mocked_android_os_sdk_for_testing",
+ srcs = ["mocked_android_framework/android/os/Build.java"],
+)
+
+genrule(
+ name = "desugar_testdata_java8",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":testdata_java8",
+ # Depend on Jacoco runtime in case :testdata_java8 was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["testdata_desugared_java8.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "--min_sdk_version 24 -i $(location :testdata_java8) -o $@ " +
+ "--classpath_entry $(location :separate) " +
+ "--classpath_entry $(location :guava_base_classpath.jar) " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar)",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+genrule(
+ name = "desugar_testdata_java8_like_in_android_studio",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":testdata_java8_like_in_android_studio",
+ # Depend on Jacoco runtime in case :testdata_java8 was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["testdata_desugared_java8_like_in_android_studio.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "--copy_bridges_from_classpath " +
+ "--legacy_jacoco_fix " +
+ "--min_sdk_version 24 " +
+ "-i $(location :testdata_java8_like_in_android_studio) -o $@ " +
+ "--classpath_entry $(location :separate) " +
+ "--classpath_entry $(location :guava_base_classpath.jar) " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar)",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+genrule(
+ name = "desugar_testdata_with_default_methods",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":testdata_java8",
+ # Depend on Jacoco runtime in case :testdata_java8 was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["testdata_desugared_default_methods.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "--desugar_interface_method_bodies_if_needed -i $(location :testdata_java8) -o $@ " +
+ "--classpath_entry $(location :separate) " +
+ "--classpath_entry $(location :guava_base_classpath.jar) " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar)",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+genrule(
+ name = "desugar_testdata_with_default_methods_for_static_initializer_test",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":testdata_java8",
+ # Depend on Jacoco runtime in case :testdata_java8 was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["testdata_desugared_default_methods.output.txt"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "--desugar_interface_method_bodies_if_needed -i $(location :testdata_java8) " +
+ "-o desugar_testdata_with_default_methods_for_static_initializer_test.jar " +
+ "--classpath_entry $(location :separate) " +
+ "--classpath_entry $(location :guava_base_classpath.jar) " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar) " +
+ " &> $@",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+genrule(
+ name = "desugar_testdata_with_default_methods_again",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":testdata_desugared_default_methods.jar",
+ # Depend on Jacoco runtime in case :testdata_java8 was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["testdata_desugared_default_methods_twice.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "--desugar_interface_method_bodies_if_needed -i $(location :testdata_desugared_default_methods.jar) -o $@ " +
+ "--classpath_entry $(location :separate) " +
+ "--classpath_entry $(location :guava_base_classpath.jar) " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar)",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+genrule(
+ name = "desugar_testdata_core_library",
+ srcs = [
+ ":testdata_core_library",
+ # Depend on Jacoco runtime in case :testdata was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["testdata_desugared_core_library.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "--core_library -i $(location :testdata_core_library) -o $@ " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar)",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+genrule(
+ name = "desugar_testdata_like_in_android_studio",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":testdata_like_in_android_studio",
+ # Depend on Jacoco runtime in case :testdata_java8 was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["testdata_desugared_like_in_android_studio.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "--min_sdk_version 23 " +
+ "--legacy_jacoco_fix " +
+ "--nodesugar_interface_method_bodies_if_needed " +
+ "-i $(location :testdata_like_in_android_studio) -o $@ " +
+ "--copy_bridges_from_classpath " +
+ "--classpath_entry $(location :separate) " +
+ "--classpath_entry $(location :guava_base_classpath.jar) " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar)",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+genrule(
+ name = "desugar_testdata_and_separate_with_multiple_inputs",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":testdata_like_in_android_studio",
+ # Depend on Jacoco runtime in case :testdata_java8 was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = [
+ "testdata_desugared_with_multiple_inputs.jar",
+ "separate_desugared_with_multiple_inputs.jar",
+ ],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "--min_sdk_version 23 --nodesugar_interface_method_bodies_if_needed " +
+ "-i $(location :testdata_like_in_android_studio) -o $(location testdata_desugared_with_multiple_inputs.jar) " +
+ "-i $(location :separate) -o $(location separate_desugared_with_multiple_inputs.jar) " +
+ "--copy_bridges_from_classpath " +
+ "--classpath_entry $(location :separate) " +
+ "--classpath_entry $(location :guava_base_classpath.jar) " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar)",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+genrule(
+ name = "desugar_testdata_from_directory_to_jar",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":testdata_like_in_android_studio",
+ # Depend on Jacoco runtime in case :testdata_java8 was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = [
+ "testdata_desugared_from_directory_to_jar.jar",
+ ],
+ cmd = """
+ tmpdir=$$(mktemp -d)
+ # unzip input jar in order to pass a folder to desugar
+ pwddir=$$PWD
+ (cd $$tmpdir; $$pwddir/$(location //tools/zip:zipper) x $$pwddir/$(location :testdata_like_in_android_studio))
+ $(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) \
+ --min_sdk_version 23 --nodesugar_interface_method_bodies_if_needed \
+ -i $$tmpdir -o $(location testdata_desugared_from_directory_to_jar.jar) \
+ --copy_bridges_from_classpath \
+ --classpath_entry $(location :separate) \
+ --classpath_entry $(location :guava_base_classpath.jar) \
+ --classpath_entry $(location //third_party/java/jacoco:blaze-agent) \
+ --bootclasspath_entry $(location //tools/defaults:android_jar)
+ rm -rf $$tmpdir
+ """,
+ tags = ["no_windows"],
+ tools = [
+ "//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar",
+ "//tools/zip:zipper",
+ ],
+)
+
+genrule(
+ name = "desugar_testdata_from_directory_to_directory",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":testdata_like_in_android_studio",
+ # Depend on Jacoco runtime in case :testdata_java8 was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = [
+ "testdata_desugared_from_directory_to_directory.jar",
+ ],
+ cmd = """
+ tmpdirIn=$$(mktemp -d)
+ tmpdirOut=$$(mktemp -d)
+ # unzip input jar in order to pass a folder to desugar
+ pwddir=$$PWD
+ (cd $$tmpdirIn; $$pwddir/$(location //tools/zip:zipper) x $$pwddir/$(location :testdata_like_in_android_studio))
+ $(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) \
+ --min_sdk_version 23 --nodesugar_interface_method_bodies_if_needed \
+ -i $$tmpdirIn -o $$tmpdirOut \
+ --copy_bridges_from_classpath \
+ --classpath_entry $(location :separate) \
+ --classpath_entry $(location :guava_base_classpath.jar) \
+ --classpath_entry $(location //third_party/java/jacoco:blaze-agent) \
+ --bootclasspath_entry $(location //tools/defaults:android_jar)
+ pushd $$tmpdirOut
+ $$pwddir/$(location //tools/zip:zipper) c $$pwddir/$(location testdata_desugared_from_directory_to_directory.jar) $$(find *)
+ popd
+ rm -rf $$tmpdirIn
+ rm -rf $$tmpdirOut
+ """,
+ tags = ["no_windows"],
+ tools = [
+ "//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar",
+ "//tools/zip:zipper",
+ ],
+)
+
+genrule(
+ name = "desugar_testdata_with_classpath_directory",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":testdata_like_in_android_studio",
+ # Depend on Jacoco runtime in case :testdata_java8 was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = [
+ "testdata_desugared_with_classpath_directory.jar",
+ ],
+ cmd = """
+ tmpdir=$$(mktemp -d)
+ # unzip a classpath entry jar in order to pass a folder to desugar
+ pwddir=$$PWD
+ (cd $$tmpdir; $$pwddir/$(location //tools/zip:zipper) x $$pwddir/$(location :separate))
+ $(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) \
+ --min_sdk_version 23 --nodesugar_interface_method_bodies_if_needed \
+ -i $(location :testdata_like_in_android_studio) -o $(location testdata_desugared_with_classpath_directory.jar) \
+ --copy_bridges_from_classpath \
+ --classpath_entry $$tmpdir \
+ --classpath_entry $(location :guava_base_classpath.jar) \
+ --classpath_entry $(location //third_party/java/jacoco:blaze-agent) \
+ --bootclasspath_entry $(location //tools/defaults:android_jar)
+ rm -rf $$tmpdir
+ """,
+ tags = ["no_windows"],
+ tools = [
+ "//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar",
+ "//tools/zip:zipper",
+ ],
+)
+
+# This target tests the flag -desugar_try_with_resources_if_needed, for desugaring
+# try-with-resources statements.
+genrule(
+ name = "desugar_testdata_by_desugaring_try_with_resources",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":testdata",
+ # Depend on Jacoco runtime in case :testdata was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["testdata_desugared_for_try_with_resources.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "--nodesugar_interface_method_bodies_if_needed -i $(location :testdata) -o $@ " +
+ "--min_sdk_version 17 --desugar_try_with_resources_if_needed " +
+ "--classpath_entry $(location :separate) " +
+ "--classpath_entry $(location :guava_base_classpath.jar) " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar)",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+# Desugars an interface with a default and a static interface method that was
+# processed by a legacy version of JaCoCo that doesn't emit interface markers
+# when calling methods it generated in interfaces (b/62623509).
+genrule(
+ name = "desugar_default_method_with_legacy_coverage",
+ srcs = [
+ "jacoco_0_7_5_default_method.jar",
+ # Depend on Jacoco runtime in case :testdata_java8 was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["jacoco_0_7_5_default_method_desugared.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "--copy_bridges_from_classpath " +
+ "--legacy_jacoco_fix " +
+ "--min_sdk_version 19 " +
+ "-i $(location :jacoco_0_7_5_default_method.jar) -o $@ " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar)",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+# Disable desugaring try-with-resources by specifying a min_sdk_version above 18.
+genrule(
+ name = "desugar_testdata_by_disabling_desugaring_try_with_resources_with_minsdkversion_above_18",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":testdata",
+ # Depend on Jacoco runtime in case :testdata was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["testdata_desugared_for_NO_desugaring_try_with_resources.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "--nodesugar_interface_method_bodies_if_needed -i $(location :testdata) -o $@ " +
+ "--min_sdk_version 19 --desugar_try_with_resources_if_needed " +
+ "--classpath_entry $(location :separate) " +
+ "--classpath_entry $(location :guava_base_classpath.jar) " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar)",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+genrule(
+ name = "desugar_testdata_by_desugaring_try_with_resources_twice",
+ srcs = [
+ ":guava_base_classpath.jar",
+ ":separate",
+ ":desugar_testdata_by_desugaring_try_with_resources",
+ # Depend on Jacoco runtime in case :testdata was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["testdata_desugared_for_try_with_resources_twice.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "--nodesugar_interface_method_bodies_if_needed -i $(location :desugar_testdata_by_desugaring_try_with_resources) -o $@ " +
+ "--min_sdk_version 17 --desugar_try_with_resources_if_needed " +
+ "--classpath_entry $(location :separate) " +
+ "--classpath_entry $(location :guava_base_classpath.jar) " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar)",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+# This target allows using the desugared jar as a regular dependency of the test
+java_import(
+ name = "testdata_desugared",
+ jars = ["testdata_desugared.jar"],
+ deps = [":separate"],
+)
+
+java_import(
+ name = "testdata_desugared_twice",
+ jars = ["testdata_desugared_twice.jar"],
+ deps = [":separate"],
+)
+
+java_import(
+ name = "testdata_desugared_java8",
+ jars = ["testdata_desugared_java8.jar"],
+ deps = [":separate"],
+)
+
+java_import(
+ name = "testdata_desugared_java8_like_in_android_studio",
+ jars = ["testdata_desugared_java8_like_in_android_studio.jar"],
+ deps = [":separate"],
+)
+
+java_import(
+ name = "testdata_desugared_default_methods",
+ jars = ["testdata_desugared_default_methods.jar"],
+ deps = [":separate"],
+)
+
+java_import(
+ name = "testdata_desugared_default_methods_twice",
+ jars = ["testdata_desugared_default_methods_twice.jar"],
+ deps = [":separate"],
+)
+
+java_import(
+ name = "testdata_desugared_core_library",
+ jars = ["testdata_desugared_core_library.jar"],
+)
+
+java_import(
+ name = "separate_desugared_with_multiple_inputs",
+ jars = ["separate_desugared_with_multiple_inputs.jar"],
+)
+
+java_import(
+ name = "testdata_desugared_with_multiple_inputs",
+ jars = ["testdata_desugared_with_multiple_inputs.jar"],
+ deps = [":separate_desugared_with_multiple_inputs"],
+)
+
+java_import(
+ name = "testdata_desugared_from_directory_to_jar",
+ jars = ["testdata_desugared_from_directory_to_jar.jar"],
+ deps = [":separate"],
+)
+
+java_import(
+ name = "testdata_desugared_from_directory_to_directory",
+ jars = ["testdata_desugared_from_directory_to_directory.jar"],
+ deps = [":separate"],
+)
+
+java_import(
+ name = "testdata_desugared_with_classpath_directory",
+ jars = ["testdata_desugared_with_classpath_directory.jar"],
+ deps = [":separate"],
+)
+
+java_import(
+ name = "testdata_desugared_like_in_android_studio",
+ jars = ["testdata_desugared_like_in_android_studio.jar"],
+ deps = [":separate"],
+)
+
+sh_test(
+ name = "stateless_lambda_has_no_factory_method_test",
+ srcs = ["diff.sh"],
+ args = [
+ "$(location stateless_lambda_disassembled_golden.txt)",
+ "$(location stateless_lambda_disassembled.txt)",
+ ],
+ data = [
+ # Golden file should show a $instance field and *no* get$Lambda() method
+ "stateless_lambda_disassembled_golden.txt",
+ ":stateless_lambda_disassembled.txt",
+ ],
+ tags = ["no_windows"],
+)
+
+genrule(
+ name = "dump_stateless_lambda",
+ srcs = [":testdata_desugared.jar"],
+ outs = ["stateless_lambda_disassembled.txt"],
+ cmd = """
+$(JAVABASE)/bin/javap -c -p -cp $< 'com.google.devtools.build.android.desugar.testdata.Lambda$$$$Lambda$$0' > $@
+""",
+ tags = ["no_windows"],
+ tools = ["@bazel_tools//tools/jdk"],
+)
+
+sh_test(
+ name = "capture_lambda_has_no_factory_method_test",
+ srcs = ["diff.sh"],
+ args = [
+ "$(location capture_lambda_disassembled_golden.txt)",
+ "$(location capture_lambda_disassembled.txt)",
+ ],
+ data = [
+ # Golden file should show a package-private constructor and *no* get$Lambda() method
+ "capture_lambda_disassembled_golden.txt",
+ ":capture_lambda_disassembled.txt",
+ ],
+ tags = ["no_windows"],
+)
+
+genrule(
+ name = "dump_capture_lambda",
+ srcs = [":testdata_desugared.jar"],
+ outs = ["capture_lambda_disassembled.txt"],
+ cmd = """
+$(JAVABASE)/bin/javap -c -p -cp $< 'com.google.devtools.build.android.desugar.testdata.CaptureLambda$$$$Lambda$$0' > $@
+""",
+ tags = ["no_windows"],
+ tools = ["@bazel_tools//tools/jdk"],
+)
+
+sh_test(
+ name = "simple_method_reference_has_no_factory_method_test",
+ srcs = ["diff.sh"],
+ args = [
+ "$(location simple_instance_method_reference_disassembled_golden.txt)",
+ "$(location simple_instance_method_reference_disassembled.txt)",
+ ],
+ data = [
+ # Golden file should show a package-private constructor and *no* get$Lambda() method
+ "simple_instance_method_reference_disassembled_golden.txt",
+ ":simple_instance_method_reference_disassembled.txt",
+ ],
+ tags = ["no_windows"],
+)
+
+genrule(
+ name = "dump_simple_instance_method_reference",
+ srcs = [":testdata_desugared.jar"],
+ outs = ["simple_instance_method_reference_disassembled.txt"],
+ cmd = """
+$(JAVABASE)/bin/javap -c -p -cp $< 'com.google.devtools.build.android.desugar.testdata.MethodReferenceSuperclass$$$$Lambda$$0' > $@
+""",
+ tags = ["no_windows"],
+ tools = ["@bazel_tools//tools/jdk"],
+)
+
+sh_test(
+ name = "interface_has_method_bodies_removed",
+ srcs = ["diff.sh"],
+ args = [
+ "$(location interface_with_desugared_method_bodies_disassembled_golden.txt)",
+ "$(location interface_with_desugared_method_bodies_disassembled.txt)",
+ ],
+ data = [
+ # Golden file should show abstract methods only and *no* static methods
+ "interface_with_desugared_method_bodies_disassembled_golden.txt",
+ ":interface_with_desugared_method_bodies_disassembled.txt",
+ ],
+ tags = ["no_windows"],
+)
+
+genrule(
+ name = "dump_interface_with_method_bodies",
+ srcs = [":testdata_desugared_default_methods.jar"],
+ outs = ["interface_with_desugared_method_bodies_disassembled.txt"],
+ # drop jacoco fields and static initializers, which jacoco may add, so the output is stable
+ # with or without coverage instrumentation
+ cmd = """
+$(JAVABASE)/bin/javap -p -cp $< 'com.google.devtools.build.android.desugar.testdata.java8.InterfaceMethod' | grep -v 'jacoco' | grep -v 'static {}' > $@
+""",
+ tags = ["no_windows"],
+ tools = ["@bazel_tools//tools/jdk"],
+)
+
+sh_test(
+ name = "inherited_abstract_method_gets_no_default_method_stub",
+ srcs = ["diff.sh"],
+ args = [
+ "$(location class_with_inherited_abstract_method_disassembled_golden.txt)",
+ "$(location class_with_inherited_abstract_method_disassembled.txt)",
+ ],
+ data = [
+ # Golden file should show *no* methods
+ "class_with_inherited_abstract_method_disassembled_golden.txt",
+ ":class_with_inherited_abstract_method_disassembled.txt",
+ ],
+ tags = ["no_windows"],
+)
+
+genrule(
+ name = "dump_class_with_inherited_abstract_method",
+ srcs = [":testdata_desugared_default_methods.jar"],
+ outs = ["class_with_inherited_abstract_method_disassembled.txt"],
+ # drop jacoco fields and static initializers, which jacoco may add, so the output is stable
+ # with or without coverage instrumentation
+ cmd = """
+$(JAVABASE)/bin/javap -p -cp $< 'com.google.devtools.build.android.desugar.testdata.java8.Named$$AbstractName' | grep -v 'jacoco' | grep -v 'static {}' > $@
+""",
+ tags = ["no_windows"],
+ tools = ["@bazel_tools//tools/jdk"],
+)
+
+sh_test(
+ name = "no_stubs_for_lambdas_in_implemented_interface",
+ srcs = ["diff.sh"],
+ args = [
+ "$(location class_with_lambdas_in_implemented_interface_disassembled_golden.txt)",
+ "$(location class_with_lambdas_in_implemented_interface_disassembled.txt)",
+ ],
+ data = [
+ # Golden file should show *no* lambda$xxx methods (and 4 stubs for default methods)
+ "class_with_lambdas_in_implemented_interface_disassembled_golden.txt",
+ ":class_with_lambdas_in_implemented_interface_disassembled.txt",
+ ],
+ tags = ["no_windows"],
+)
+
+genrule(
+ name = "dump_class_with_lambdas_in_implemented_interface",
+ srcs = [":testdata_desugared_default_methods.jar"],
+ outs = ["class_with_lambdas_in_implemented_interface_disassembled.txt"],
+ # drop jacoco fields and static initializers, which jacoco may add, so the output is stable
+ # with or without coverage instrumentation
+ cmd = """
+$(JAVABASE)/bin/javap -p -cp $< 'com.google.devtools.build.android.desugar.testdata.java8.InterfaceMethod$$Concrete' | grep -v 'jacoco' | grep -v 'static {}' > $@
+""",
+ tags = ["no_windows"],
+ tools = ["@bazel_tools//tools/jdk"],
+)
+
+sh_test(
+ name = "desugar_idempotency_test",
+ srcs = ["diff.sh"],
+ args = [
+ "$(location :capture_lambda_desugared.jar)",
+ "$(location :capture_lambda_desugared_twice.jar)",
+ ],
+ data = [
+ ":capture_lambda_desugared.jar",
+ ":capture_lambda_desugared_twice.jar",
+ ],
+ tags = ["no_windows"],
+)
+
+# Smaller Jar used for idempotency test. CaptureLambda can be desugared without
+# any need to fix up the resulting lambda class. Running the desugaring tool
+# over lambda classes that required fixes somehow perturbs the constant pool
+# (but nothing else) so for simplicity we use this Jar for the idempotency test
+# we don't run into the perturbance issue.
+java_library(
+ name = "capture_lambda",
+ srcs = ["testdata/CaptureLambda.java"],
+)
+
+genrule(
+ name = "desugar_capture_lambda",
+ srcs = [
+ ":capture_lambda",
+ # Depend on Jacoco runtime in case :testdata was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["capture_lambda_desugared.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "-i $(location :capture_lambda) -o $@ " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar)",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+genrule(
+ name = "desugar_capture_lambda_again",
+ srcs = [
+ ":capture_lambda_desugared.jar",
+ # Depend on Jacoco runtime in case :testdata was instrumented with
+ # --collect_code_coverage or by running "blaze coverage"
+ "//third_party/java/jacoco:blaze-agent",
+ "//tools/defaults:android_jar",
+ ],
+ outs = ["capture_lambda_desugared_twice.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "-i $(location :capture_lambda_desugared.jar) -o $@ " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location //tools/defaults:android_jar)",
+ tags = ["no_windows"],
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+sh_test(
+ name = "testdata_sanity_test",
+ srcs = ["diff.sh"],
+ args = [
+ "$(location :baseclass_lambda_signature.txt)",
+ "$(location :subclass_lambda_signature.txt)",
+ ],
+ data = [
+ ":baseclass_lambda_signature.txt",
+ ":subclass_lambda_signature.txt",
+ ],
+ tags = ["no_windows"],
+)
+
+genrule(
+ name = "baseclass_lambda_signature",
+ srcs = [":testdata"],
+ outs = [
+ "baseclass_disassembled.txt",
+ "baseclass_lambda_signature.txt",
+ ],
+ cmd = """
+$(JAVABASE)/bin/javap -p -cp $< com.google.devtools.build.android.desugar.testdata.OuterReferenceLambda > $(location baseclass_disassembled.txt)
+grep lambda $(location baseclass_disassembled.txt) > $(location baseclass_lambda_signature.txt)""",
+ tags = ["no_windows"],
+ tools = ["@bazel_tools//tools/jdk"],
+)
+
+genrule(
+ name = "subclass_lambda_signature",
+ srcs = [":testdata"],
+ outs = [
+ "subclass_disassembled.txt",
+ "subclass_lambda_signature.txt",
+ ],
+ cmd = """
+$(JAVABASE)/bin/javap -p -cp $< com.google.devtools.build.android.desugar.testdata.LambdaInOverride > $(location subclass_disassembled.txt)
+grep lambda $(location subclass_disassembled.txt) > $(location subclass_lambda_signature.txt)""",
+ tags = ["no_windows"],
+ tools = [
+ "@bazel_tools//tools/jdk",
+ ],
+)
+
+# b/62623509 regression test. Calls to jacoco-generated method in interface
+# need to be rewritten to call the companion class even though the original
+# bytecode falsely doesn't indicate that the method is declared in an
+# interface. Jacoco-generated field is *not* moved.
+sh_test(
+ name = "jacoco_legacy_default_method_regression_test",
+ srcs = ["diff.sh"],
+ args = [
+ "$(location :jacoco_legacy_default_method_companion_disassembled_golden.txt)",
+ "$(location :jacoco_legacy_default_method_companion_disassembled.txt)",
+ ],
+ data = [
+ "jacoco_legacy_default_method_companion_disassembled_golden.txt",
+ ":jacoco_legacy_default_method_companion_disassembled.txt",
+ ],
+ tags = ["no_windows"],
+)
+
+genrule(
+ name = "dump_jacoco_legacy_default_method_companion",
+ srcs = [":jacoco_0_7_5_default_method_desugared.jar"],
+ outs = ["jacoco_legacy_default_method_companion_disassembled.txt"],
+ cmd = """$(JAVABASE)/bin/javap -c -p -cp $< 'com/example/gavra/java8coverage/Defaults$$$$CC' > $@""",
+ tags = ["no_windows"],
+ tools = [
+ "@bazel_tools//tools/jdk",
+ ],
+)
+
+alias(
+ name = "guava_base_classpath.jar",
+ actual = "//third_party:guava/guava-21.0.jar",
+)
+
+java_binary(
+ name = "generate_synthetic_method_with_lambda_name_convention",
+ srcs = ["Bug62456849TestDataGenerator.java"],
+ main_class = "com.google.devtools.build.android.desugar.Bug62456849TestDataGenerator",
+ deps = [
+ "//third_party:asm",
+ "//third_party:guava",
+ ],
+)