Add Bazel flags for desugared lib tests
Bug: 134732760
Change-Id: I45048fbcc7a4e13eaa6a781deb7c86f8d8620a16
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 9e12e01..fe77491 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -382,8 +382,11 @@
*/
public boolean enableInheritanceClassInDexDistributor = true;
+ public boolean coreLibraryCompilation = false;
public Map<String, String> rewritePrefix = ImmutableMap.of();
public Map<String, String> emulateLibraryInterface = ImmutableMap.of();
+ public Map<String, String> retargetCoreLibMember = ImmutableMap.of();
+ public List<String> dontRewriteInvocations = ImmutableList.of();
public LineNumberOptimization lineNumberOptimization = LineNumberOptimization.ON;
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/CoreLibDesugarTestBase.java b/src/test/java/com/android/tools/r8/desugar/corelib/CoreLibDesugarTestBase.java
index 783d1ab..d41afd7 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/CoreLibDesugarTestBase.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/CoreLibDesugarTestBase.java
@@ -9,22 +9,21 @@
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.InternalOptions;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.nio.file.Path;
+import java.util.List;
import java.util.Map;
public class CoreLibDesugarTestBase extends TestBase {
- private Map<String, String> buildPrefixRewriting() {
- // TODO(134732760): Make 2 different methods when compiling core_library or not.
+
+ private Map<String, String> buildPrefixRewritingForCoreLibCompilation() {
return ImmutableMap.<String, String>builder()
// --rewrite_core_library_prefix.
.put("java.lang.Double8", "j$.lang.Double8")
.put("java.lang.Integer8", "j$.lang.Integer8")
.put("java.lang.Long8", "j$.lang.Long8")
.put("java.lang.Math8", "j$.lang.Math8")
- .put("java.io.Desugar", "j$.io.Desugar")
- // TODO(134732760): I do not see UncheckedIOException in Bazel
- .put("java.io.UncheckedIOException", "j$.io.UncheckedIOException")
.put("java.time.", "j$.time.")
.put("java.util.stream.", "j$.util.stream.")
.put("java.util.function.", "j$.util.function.")
@@ -47,66 +46,105 @@
.build();
}
- // TODO(134732760): Following flag when compiling a core_library.
- // --core_library.
+ private Map<String, String> buildPrefixRewritingForProgramCompilation() {
+ return ImmutableMap.<String, String>builder()
+ // --rewrite_core_library_prefix.
+ // TODO (b/134732760): Rewrite java.util.Long8 to java.util.Long
+ // .put("java.lang.Double8", "j$.lang.Double8")
+ // .put("java.lang.Integer8", "j$.lang.Integer8")
+ // .put("java.lang.Long8", "j$.lang.Long8")
+ // .put("java.lang.Math8", "j$.lang.Math8")
+ .put("java.util.stream.", "j$.util.stream.")
+ .put("java.util.function.", "j$.util.function.")
+ .put("java.util.Desugar", "j$.util.Desugar")
+ .put("java.util.DoubleSummaryStatistics", "j$.util.DoubleSummaryStatistics")
+ .put("java.util.IntSummaryStatistics", "j$.util.IntSummaryStatistics")
+ .put("java.util.LongSummaryStatistics", "j$.util.LongSummaryStatistics")
+ .put("java.util.Objects", "j$.util.Objects")
+ .put("java.util.Optional", "j$.util.Optional")
+ .put("java.util.PrimitiveIterator", "j$.util.PrimitiveIterator")
+ .put("java.util.Spliterator", "j$.util.Spliterator")
+ .put("java.util.StringJoiner", "j$.util.StringJoiner")
+ .put("java.util.concurrent.ConcurrentHashMap", "j$.util.concurrent.ConcurrentHashMap")
+ .put("java.util.concurrent.ThreadLocalRandom", "j$.util.concurrent.ThreadLocalRandom")
+ .put("java.util.concurrent.atomic.DesugarAtomic", "j$.util.concurrent.atomic.DesugarAtomic")
+ .build();
+ }
- // TODO(134732760): Following flag when compiling a core_library.
- // --retarget_core_library_member
- // "java/util/LinkedHashSet#spliterator->java/util/DesugarLinkedHashSet".
+ private Map<String, String> buildRetargetCoreLibraryMemberForCoreLibCompilation() {
+ // --retarget_core_library_member.
+ return ImmutableMap.of("java/util/LinkedHashSet#spliterator", "j$/util/DesugarLinkedHashSet");
+ }
- // TODO(134732760): Following flags when compiling the program using the core_library
- // --retarget_core_library_member "java/lang/Double#max->java/lang/Double8" \
- // --retarget_core_library_member "java/lang/Double#min->java/lang/Double8" \
- // --retarget_core_library_member "java/lang/Double#sum->java/lang/Double8" \
- // --retarget_core_library_member "java/lang/Integer#max->java/lang/Integer8" \
- // --retarget_core_library_member "java/lang/Integer#min->java/lang/Integer8" \
- // --retarget_core_library_member "java/lang/Integer#sum->java/lang/Integer8" \
- // --retarget_core_library_member "java/lang/Long#max->java/lang/Long8" \
- // --retarget_core_library_member "java/lang/Long#min->java/lang/Long8" \
- // --retarget_core_library_member "java/lang/Long#sum->java/lang/Long8" \
- // --retarget_core_library_member "java/lang/Math#toIntExact->java/lang/Math8" \
- // --retarget_core_library_member "java/util/Arrays#stream->java/util/DesugarArrays" \
- // --retarget_core_library_member "java/util/Arrays#spliterator->java/util/DesugarArrays" \
- // --retarget_core_library_member "java/util/Calendar#toInstant->java/util/DesugarCalendar" \
- // --retarget_core_library_member "java/util/Date#from->java/util/DesugarDate" \
- // --retarget_core_library_member "java/util/Date#toInstant->java/util/DesugarDate" \
- // --retarget_core_library_member
- // "java/util/GregorianCalendar#from->java/util/DesugarGregorianCalendar" \
- // --retarget_core_library_member
- // "java/util/GregorianCalendar#toZonedDateTime->java/util/DesugarGregorianCalendar" \
- // --retarget_core_library_member
- // "java/util/LinkedHashSet#spliterator->java/util/DesugarLinkedHashSet" \
- // --retarget_core_library_member
- // "java/util/concurrent/atomic/AtomicInteger#getAndUpdate->java/util/concurrent/atomic/DesugarAtomicInteger" \
- // --retarget_core_library_member
- // "java/util/concurrent/atomic/AtomicInteger#updateAndGet->java/util/concurrent/atomic/DesugarAtomicInteger" \
- // --retarget_core_library_member
- // "java/util/concurrent/atomic/AtomicInteger#getAndAccumulate->java/util/concurrent/atomic/DesugarAtomicInteger" \
- // --retarget_core_library_member
- // "java/util/concurrent/atomic/AtomicInteger#accumulateAndGet->java/util/concurrent/atomic/DesugarAtomicInteger" \
- // --retarget_core_library_member
- // "java/util/concurrent/atomic/AtomicLong#getAndUpdate->java/util/concurrent/atomic/DesugarAtomicLong" \
- // --retarget_core_library_member
- // "java/util/concurrent/atomic/AtomicLong#updateAndGet->java/util/concurrent/atomic/DesugarAtomicLong" \
- // --retarget_core_library_member
- // "java/util/concurrent/atomic/AtomicLong#getAndAccumulate->java/util/concurrent/atomic/DesugarAtomicLong" \
- // --retarget_core_library_member
- // "java/util/concurrent/atomic/AtomicLong#accumulateAndGet->java/util/concurrent/atomic/DesugarAtomicLong" \
- // --retarget_core_library_member
- // "java/util/concurrent/atomic/AtomicReference#getAndUpdate->java/util/concurrent/atomic/DesugarAtomicReference" \
- // --retarget_core_library_member
- // "java/util/concurrent/atomic/AtomicReference#updateAndGet->java/util/concurrent/atomic/DesugarAtomicReference" \
- // --retarget_core_library_member
- // "java/util/concurrent/atomic/AtomicReference#getAndAccumulate->java/util/concurrent/atomic/DesugarAtomicReference" \
- // --retarget_core_library_member
- // "java/util/concurrent/atomic/AtomicReference#accumulateAndGet->java/util/concurrent/atomic/DesugarAtomicReference" .
+ private Map<String, String> buildRetargetCoreLibraryMemberForProgramCompilation() {
+ // --retarget_core_library_member.
+ return ImmutableMap.<String, String>builder()
+ // We ignore the following flags required by Bazel because desuagring of these methods
+ // is done separately.
+ // .put("java/lang/Double#max", "j$/lang/Double8")
+ // .put("java/lang/Double#min", "j$/lang/Double8")
+ // .put("java/lang/Double#sum", "j$/lang/Double8")
+ // .put("java/lang/Integer#max", "j$/lang/Integer8")
+ // .put("java/lang/Integer#min", "j$/lang/Integer8")
+ // .put("java/lang/Integer#sum", "j$/lang/Integer8")
+ // .put("java/lang/Long#max", "j$/lang/Long")
+ // .put("java/lang/Long#min", "j$/lang/Long")
+ // .put("java/lang/Long#sum", "j$/lang/Long")
+ // .put("java/lang/Math#toIntExact", "j$/lang/Math8")
+ .put("java/util/Arrays#stream", "j$/util/DesugarArrays")
+ .put("java/util/Arrays#spliterator", "j$/util/DesugarArrays")
+ .put("java/util/Calendar#toInstant", "j$/util/DesugarCalendar")
+ .put("java/util/Date#from", "j$/util/DesugarDate")
+ .put("java/util/Date#toInstant", "j$/util/DesugarDate")
+ .put("java/util/GregorianCalendar#from", "j$/util/DesugarGregorianCalendar")
+ .put("java/util/GregorianCalendar#toZonedDateTime", "j$/util/DesugarGregorianCalendar")
+ .put("java/util/LinkedHashSet#spliterator", "j$/util/DesugarLinkedHashSet")
+ .put(
+ "java/util/concurrent/atomic/AtomicInteger#getAndUpdate",
+ "j$/util/concurrent/atomic/DesugarAtomicInteger")
+ .put(
+ "java/util/concurrent/atomic/AtomicInteger#updateAndGet",
+ "j$/util/concurrent/atomic/DesugarAtomicInteger")
+ .put(
+ "java/util/concurrent/atomic/AtomicInteger#getAndAccumulate",
+ "j$/util/concurrent/atomic/DesugarAtomicInteger")
+ .put(
+ "java/util/concurrent/atomic/AtomicInteger#accumulateAndGet",
+ "j$/util/concurrent/atomic/DesugarAtomicInteger")
+ .put(
+ "java/util/concurrent/atomic/AtomicLong#getAndUpdate",
+ "j$/util/concurrent/atomic/DesugarAtomicLong")
+ .put(
+ "java/util/concurrent/atomic/AtomicLong#updateAndGet",
+ "j$/util/concurrent/atomic/DesugarAtomicLong")
+ .put(
+ "java/util/concurrent/atomic/AtomicLong#getAndAccumulate",
+ "j$/util/concurrent/atomic/DesugarAtomicLong")
+ .put(
+ "java/util/concurrent/atomic/AtomicLong#accumulateAndGet",
+ "j$/util/concurrent/atomic/DesugarAtomicLong")
+ .put(
+ "java/util/concurrent/atomic/AtomicReference#getAndUpdate",
+ "j$/util/concurrent/atomic/DesugarAtomicReference")
+ .put(
+ "java/util/concurrent/atomic/AtomicReference#updateAndGet",
+ "j$/util/concurrent/atomic/DesugarAtomicReference")
+ .put(
+ "java/util/concurrent/atomic/AtomicReference#getAndAccumulate",
+ "j$/util/concurrent/atomic/DesugarAtomicReference")
+ .put(
+ "java/util/concurrent/atomic/AtomicReference#accumulateAndGet",
+ "j$/util/concurrent/atomic/DesugarAtomicReference")
+ .build();
+ }
- // TODO(134732760): Following flag for both compilation.
- // --dont_rewrite_core_library_invocation "java/util/Iterator#remove"
+ private List<String> buildDontRewriteInvocations() {
+ // --dont_rewrite_core_library_invocation "java/util/Iterator#remove".
+ return ImmutableList.of("java/util/Iterator#remove");
+ }
private Map<String, String> buildEmulateLibraryInterface() {
return ImmutableMap.<String, String>builder()
- // Following flags for both compilation.
// --emulate_core_library_interface.
.put("java.util.Collection", "j$.util.Collection")
.put("java.util.Map", "j$.util.Map")
@@ -116,8 +154,19 @@
.build();
}
- protected void configureCoreLibDesugar(InternalOptions options) {
- options.rewritePrefix = buildPrefixRewriting();
+ protected void configureCoreLibDesugarForCoreLibCompilation(InternalOptions options) {
+ options.coreLibraryCompilation = true;
+ options.retargetCoreLibMember = buildRetargetCoreLibraryMemberForCoreLibCompilation();
+ options.dontRewriteInvocations = buildDontRewriteInvocations();
+ options.rewritePrefix = buildPrefixRewritingForCoreLibCompilation();
+ options.emulateLibraryInterface = buildEmulateLibraryInterface();
+ }
+
+ protected void configureCoreLibDesugarForProgramCompilation(InternalOptions options) {
+ options.coreLibraryCompilation = false;
+ options.retargetCoreLibMember = buildRetargetCoreLibraryMemberForProgramCompilation();
+ options.dontRewriteInvocations = buildDontRewriteInvocations();
+ options.rewritePrefix = buildPrefixRewritingForProgramCompilation();
options.emulateLibraryInterface = buildEmulateLibraryInterface();
}
@@ -125,7 +174,7 @@
return testForD8()
.addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
.addProgramFiles(ToolHelper.getDesugarJDKLibs())
- .addOptionsModification(this::configureCoreLibDesugar)
+ .addOptionsModification(this::configureCoreLibDesugarForCoreLibCompilation)
.setMinApi(apiLevel)
.compile()
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/DesugaredLibraryContentTest.java b/src/test/java/com/android/tools/r8/desugar/corelib/DesugaredLibraryContentTest.java
index 53a12b4..5d5d24d 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/DesugaredLibraryContentTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/DesugaredLibraryContentTest.java
@@ -74,8 +74,8 @@
// TODO(134732760): This should be a 0 count.
assertEquals(
parameters.getRuntime().asDex().getMinApiLevel().getLevel() < AndroidApiLevel.N.getLevel()
- ? 39
- : 24,
+ ? 38
+ : 27,
inspector.allClasses().stream()
.map(ClassSubject::getOriginalName)
.filter(name -> name.startsWith("java."))
@@ -85,8 +85,8 @@
// TODO(134732760): Remove this when above is a 0 count.
assertEquals(
parameters.getRuntime().asDex().getMinApiLevel().getLevel() < AndroidApiLevel.N.getLevel()
- ? 10
- : 5,
+ ? 13
+ : 8,
inspector.allClasses().stream()
.map(ClassSubject::getOriginalName)
.filter(name -> name.startsWith("java."))
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/JavaTimeTest.java b/src/test/java/com/android/tools/r8/desugar/corelib/JavaTimeTest.java
index 8b7fcd8..ad8146b 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/JavaTimeTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/JavaTimeTest.java
@@ -52,7 +52,7 @@
.addInnerClasses(JavaTimeTest.class)
.addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
.setMinApi(parameters.getRuntime())
- .addOptionsModification(this::configureCoreLibDesugar)
+ .addOptionsModification(this::configureCoreLibDesugarForCoreLibCompilation)
.compile()
.inspect(this::checkRewrittenInvokes)
.addRunClasspathFiles(buildDesugaredLibrary(parameters.getRuntime()))
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/JavaUtilFunctionTest.java b/src/test/java/com/android/tools/r8/desugar/corelib/JavaUtilFunctionTest.java
index 1f3ea2b..92b7941 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/JavaUtilFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/JavaUtilFunctionTest.java
@@ -56,7 +56,7 @@
.addInnerClasses(JavaUtilFunctionTest.class)
.addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
.setMinApi(parameters.getRuntime())
- .addOptionsModification(this::configureCoreLibDesugar)
+ .addOptionsModification(this::configureCoreLibDesugarForProgramCompilation)
.compile()
.inspect(this::checkRewrittenArguments)
.addRunClasspathFiles(buildDesugaredLibrary(parameters.getRuntime()))
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/JavaUtilOptionalTest.java b/src/test/java/com/android/tools/r8/desugar/corelib/JavaUtilOptionalTest.java
index 01a745e..3a996cd 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/JavaUtilOptionalTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/JavaUtilOptionalTest.java
@@ -77,7 +77,7 @@
.addInnerClasses(JavaUtilOptionalTest.class)
.addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
.setMinApi(parameters.getRuntime())
- .addOptionsModification(this::configureCoreLibDesugar)
+ .addOptionsModification(this::configureCoreLibDesugarForProgramCompilation)
.compile()
.inspect(this::checkRewrittenInvokes)
.addRunClasspathFiles(buildDesugaredLibrary(parameters.getRuntime()))