Reapply "Re-enable toArray desugaring"

This reverts commit a1085b0ee3200c822321cfaf44aa844e2e4e60c8.

Change-Id: I74b64371fe8e7bf86cf2f4e2ac34e82d64ad8001
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs.json b/src/library_desugar/jdk11/desugar_jdk_libs.json
index df0df7b..98e217d 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs.json
@@ -1,5 +1,5 @@
 {
-  "identifier": "com.tools.android:desugar_jdk_libs_configuration:2.0.4",
+  "identifier": "com.tools.android:desugar_jdk_libs_configuration:2.1.0",
   "configuration_format_version": 101,
   "required_compilation_api_level": 30,
   "synthesized_library_classes_package_prefix": "j$.",
@@ -7,6 +7,12 @@
   "common_flags": [
     {
       "api_level_below_or_equal": 10000,
+      "amend_library_method": [
+        "public java.lang.Object[] java.util.Collection#toArray(java.util.function.IntFunction)"
+      ]
+    },
+    {
+      "api_level_below_or_equal": 10000,
       "api_level_greater_or_equal": 26,
       "rewrite_prefix": {
         "java.time.DesugarLocalDate": "j$.time.DesugarLocalDate",
@@ -57,6 +63,14 @@
       "rewrite_prefix": {
         "java.util.concurrent.DesugarTimeUnit": "j$.util.concurrent.DesugarTimeUnit"
       },
+      "emulate_interface": {
+        "java.util.Collection": {
+          "rewrittenType": "j$.util.Collection",
+          "emulatedMethods": [
+            "java.lang.Object[] java.util.Collection#toArray(java.util.function.IntFunction)"
+          ]
+        }
+      },
       "retarget_method": {
         "java.util.concurrent.TimeUnit java.util.concurrent.TimeUnit#of(java.time.temporal.ChronoUnit)": "java.util.concurrent.DesugarTimeUnit",
         "java.time.temporal.ChronoUnit java.util.concurrent.TimeUnit#toChronoUnit()": "java.util.concurrent.DesugarTimeUnit",
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs_minimal.json b/src/library_desugar/jdk11/desugar_jdk_libs_minimal.json
index d69ed9a..7303240 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs_minimal.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs_minimal.json
@@ -1,5 +1,5 @@
 {
-  "identifier": "com.tools.android:desugar_jdk_libs_configuration_minimal:2.0.4",
+  "identifier": "com.tools.android:desugar_jdk_libs_configuration_minimal:2.1.0",
   "configuration_format_version": 101,
   "required_compilation_api_level": 24,
   "synthesized_library_classes_package_prefix": "j$.",
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs_nio.json b/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
index 29e4e26..41ff9a8 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
@@ -1,5 +1,5 @@
 {
-  "identifier": "com.tools.android:desugar_jdk_libs_configuration_nio:2.0.4",
+  "identifier": "com.tools.android:desugar_jdk_libs_configuration_nio:2.1.0",
   "configuration_format_version": 101,
   "required_compilation_api_level": 30,
   "synthesized_library_classes_package_prefix": "j$.",
@@ -8,6 +8,7 @@
     {
       "api_level_below_or_equal": 10000,
       "amend_library_method": [
+        "public java.lang.Object[] java.util.Collection#toArray(java.util.function.IntFunction)",
         "public static java.nio.file.Path java.nio.file.Path#of(java.lang.String, java.lang.String[])",
         "public static java.nio.file.Path java.nio.file.Path#of(java.net.URI)"
       ]
@@ -76,6 +77,14 @@
         "java.io.DesugarInputStream": "j$.io.DesugarInputStream",
         "java.util.concurrent.DesugarTimeUnit": "j$.util.concurrent.DesugarTimeUnit"
       },
+      "emulate_interface": {
+        "java.util.Collection": {
+          "rewrittenType": "j$.util.Collection",
+          "emulatedMethods": [
+            "java.lang.Object[] java.util.Collection#toArray(java.util.function.IntFunction)"
+          ]
+        }
+      },
       "retarget_method": {
         "java.util.concurrent.TimeUnit java.util.concurrent.TimeUnit#of(java.time.temporal.ChronoUnit)": "java.util.concurrent.DesugarTimeUnit",
         "java.time.temporal.ChronoUnit java.util.concurrent.TimeUnit#toChronoUnit()": "java.util.concurrent.DesugarTimeUnit",
@@ -588,7 +597,9 @@
       "api_level_below_or_equal": 10000,
       "api_level_greater_or_equal": 26,
       "rewrite_prefix": {
-        "sun.nio.cs.UTF_8": "j$.sun.nio.cs.UTF_8"
+        "sun.nio.cs.UTF_8": "j$.sun.nio.cs.UTF_8",
+        "sun.nio.cs.Unicode": "j$.sun.nio.cs.Unicode",
+        "sun.nio.cs.HistoricallyNamedCharset": "j$.sun.nio.cs.HistoricallyNamedCharset"
       },
       "retarget_static_field": {
         "sun.nio.cs.UTF_8 sun.nio.cs.UTF_8#INSTANCE": "java.nio.charset.Charset java.nio.charset.StandardCharsets#UTF_8"
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryInvokeAllResolveTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryInvokeAllResolveTest.java
index c134dc8..1d3b636 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryInvokeAllResolveTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryInvokeAllResolveTest.java
@@ -131,10 +131,10 @@
         BackportedMethodRewriter.generateListOfBackportedMethods(libHolder, options);
     Map<DexMethod, Object> failures = new IdentityHashMap<>();
     for (FoundClassSubject clazz : inspector.allClasses()) {
-      if (clazz.toString().startsWith("j$.sun.nio.cs.UTF_8")
+      if (clazz.toString().startsWith("j$.sun.nio.cs.")
           && parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.O)) {
-        // At high API level, the class UTF_8 is there just for resolution, the field access is
-        // retargeted and the code is unused so it's ok if it does not resolve.
+        // At high API level, the sun.nio.cs classes are there just for resolution, the field
+        // access is retargeted and the code is unused so it's ok if it does not resolve.
         continue;
       }
       for (FoundMethodSubject method : clazz.allMethods()) {
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/PartialDesugaringTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/PartialDesugaringTest.java
index 7d29fa4..2d01320 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/PartialDesugaringTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/PartialDesugaringTest.java
@@ -217,14 +217,10 @@
         && api.isLessThan(AndroidApiLevel.T)) {
       expectedFailures.addAll(FAILURES_FILE_STORE);
     }
-    if (librarySpecification != JDK11_MINIMAL && api.isLessThan(AndroidApiLevel.T)) {
-      if (librarySpecification == JDK8) {
-        if (api.isGreaterThanOrEqualTo(AndroidApiLevel.N)) {
-          expectedFailures.addAll(FAILURES_TO_ARRAY);
-        }
-      } else {
-        expectedFailures.addAll(FAILURES_TO_ARRAY);
-      }
+    if (librarySpecification == JDK8
+        && api.isLessThan(AndroidApiLevel.T)
+        && api.isGreaterThanOrEqualTo(AndroidApiLevel.N)) {
+      expectedFailures.addAll(FAILURES_TO_ARRAY);
     }
     if (jdk11NonMinimal
         && api.isGreaterThanOrEqualTo(AndroidApiLevel.O)
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/CollectionToArrayTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/CollectionToArrayTest.java
index bd5554af..6f1b750 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/CollectionToArrayTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/CollectionToArrayTest.java
@@ -18,7 +18,6 @@
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -54,7 +53,6 @@
     this.compilationSpecification = compilationSpecification;
   }
 
-  @Ignore("b/266401747")
   @Test
   public void test() throws Throwable {
     testForDesugaredLibrary(parameters, libraryDesugaringSpecification, compilationSpecification)