Fix desugared library flags and export
- Fix the toArray duplicate flag for red bots
- Fix the exporter so we can test the flag issue
Change-Id: Iee2ceccfdf7d2c00287b453c83246c0dd0efc465
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs.json b/src/library_desugar/jdk11/desugar_jdk_libs.json
index 98e217d..3d23d9f 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs.json
@@ -374,12 +374,6 @@
]
},
{
- "api_level_below_or_equal": 33,
- "amend_library_method": [
- "public java.lang.Object[] java.util.Collection#toArray(java.util.function.IntFunction)"
- ]
- },
- {
"api_level_below_or_equal": 32,
"api_level_greater_or_equal": 26,
"covariant_retarget_method": {
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs_nio.json b/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
index 41ff9a8..0f81af4 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
@@ -541,12 +541,6 @@
}
},
{
- "api_level_below_or_equal": 33,
- "amend_library_method": [
- "public java.lang.Object[] java.util.Collection#toArray(java.util.function.IntFunction)"
- ]
- },
- {
"api_level_below_or_equal": 32,
"api_level_greater_or_equal": 26,
"covariant_retarget_method": {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.java
index cb907d1..055d373 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.java
@@ -217,7 +217,7 @@
BiConsumer<T, HumanEmulatedInterfaceDescriptor> specific) {
flags.forEach(
(k, v) -> {
- if (otherFlags.get(k) == v) {
+ if (otherFlags.get(k).equals(v)) {
common.accept(k, v);
} else {
specific.accept(k, v);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationJsonExporter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationJsonExporter.java
index d5dc102..7973e0c 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationJsonExporter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationJsonExporter.java
@@ -5,6 +5,7 @@
package com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification;
import static com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser.CONFIGURATION_FORMAT_VERSION_KEY;
+import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.AMEND_LIBRARY_FIELD_KEY;
import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.AMEND_LIBRARY_METHOD_KEY;
import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.API_GENERIC_TYPES_CONVERSION;
import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.API_LEVEL_BELOW_OR_EQUAL_KEY;
@@ -172,7 +173,7 @@
toJson.put(AMEND_LIBRARY_METHOD_KEY, amendLibraryToString(flags.getAmendLibraryMethod()));
}
if (!flags.getAmendLibraryField().isEmpty()) {
- toJson.put(AMEND_LIBRARY_METHOD_KEY, amendLibraryToString(flags.getAmendLibraryField()));
+ toJson.put(AMEND_LIBRARY_FIELD_KEY, amendLibraryToString(flags.getAmendLibraryField()));
}
list.add(toJson);
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/specification/ConvertExportReadTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/specification/ConvertExportReadTest.java
index e2c0f74..fd41179 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/specification/ConvertExportReadTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/specification/ConvertExportReadTest.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.desugar.desugaredlibrary.specification;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.*;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -64,7 +65,7 @@
public void testMultiLevelLegacy() throws IOException {
Assume.assumeTrue(ToolHelper.isLocalDevelopment());
- LibraryDesugaringSpecification legacySpec = LibraryDesugaringSpecification.JDK8;
+ LibraryDesugaringSpecification legacySpec = JDK8;
LegacyToHumanSpecificationConverter converter =
new LegacyToHumanSpecificationConverter(Timing.empty());
@@ -108,13 +109,13 @@
@Test
public void testMultiLevelLegacyUsingMain() throws IOException {
- LibraryDesugaringSpecification legacySpec = LibraryDesugaringSpecification.JDK8;
+ LibraryDesugaringSpecification legacySpec = JDK8;
testMultiLevelUsingMain(legacySpec);
}
@Test
public void testMultiLevelHumanUsingMain() throws IOException {
- LibraryDesugaringSpecification humanSpec = LibraryDesugaringSpecification.JDK11;
+ LibraryDesugaringSpecification humanSpec = JDK11;
testMultiLevelUsingMain(humanSpec);
}
@@ -133,12 +134,6 @@
output,
options);
- MachineDesugaredLibrarySpecification machineSpecParsed =
- new MachineDesugaredLibrarySpecificationParser(
- options.dexItemFactory(), options.reporter, true, AndroidApiLevel.B.getLevel())
- .parse(StringResource.fromFile(output));
- assertFalse(machineSpecParsed.getRewriteType().isEmpty());
-
if (humanSpec == null) {
return;
}
@@ -154,24 +149,35 @@
assertSpecEquals(humanSpec, writtenHumanSpec);
// Validate converted machine spec is identical to the written one.
- HumanDesugaredLibrarySpecification humanSimpleSpec =
- new HumanDesugaredLibrarySpecificationParser(
- options.dexItemFactory(), options.reporter, true, AndroidApiLevel.B.getLevel())
- .parse(StringResource.fromString(json.get(), Origin.unknown()));
- HumanToMachineSpecificationConverter converter =
- new HumanToMachineSpecificationConverter(Timing.empty());
- DexApplication app = spec.getAppForTesting(options, true);
- MachineDesugaredLibrarySpecification machineSimpleSpec =
- converter.convert(humanSimpleSpec, app);
+ for (AndroidApiLevel api :
+ new AndroidApiLevel[] {AndroidApiLevel.B, AndroidApiLevel.N, AndroidApiLevel.O}) {
+ MachineDesugaredLibrarySpecification machineSpecParsed =
+ new MachineDesugaredLibrarySpecificationParser(
+ options.dexItemFactory(), options.reporter, true, api.getLevel())
+ .parse(StringResource.fromFile(output));
+ assertEquals(
+ api.isGreaterThanOrEqualTo(AndroidApiLevel.O) && spec == JDK8,
+ machineSpecParsed.getRewriteType().isEmpty());
- assertSpecEquals(machineSimpleSpec, machineSpecParsed);
+ HumanDesugaredLibrarySpecification humanSimpleSpec =
+ new HumanDesugaredLibrarySpecificationParser(
+ options.dexItemFactory(), options.reporter, true, api.getLevel())
+ .parse(StringResource.fromString(json.get(), Origin.unknown()));
+ HumanToMachineSpecificationConverter converter =
+ new HumanToMachineSpecificationConverter(Timing.empty());
+ DexApplication app = spec.getAppForTesting(options, true);
+ MachineDesugaredLibrarySpecification machineSimpleSpec =
+ converter.convert(humanSimpleSpec, app);
+
+ assertSpecEquals(machineSimpleSpec, machineSpecParsed);
+ }
}
@Test
public void testSingleLevel() throws IOException {
Assume.assumeTrue(ToolHelper.isLocalDevelopment());
- LibraryDesugaringSpecification humanSpec = LibraryDesugaringSpecification.JDK11_PATH;
+ LibraryDesugaringSpecification humanSpec = JDK11_PATH;
InternalOptions options = new InternalOptions();
@@ -296,6 +302,8 @@
assertEquals(
humanRewritingFlags1.getAmendLibraryMethod(), humanRewritingFlags2.getAmendLibraryMethod());
+ assertEquals(
+ humanRewritingFlags1.getAmendLibraryField(), humanRewritingFlags2.getAmendLibraryField());
}
private void assertTopLevelFlagsEquals(