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(