Fix emulated interface with jdk21 methods in library

- Upgraded emulated interface flag in human specification
  to describe supported emulated methods

Bug: b/308330804
Change-Id: I7eacf3e6a00eaf89f8946a71d38468157790346e
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs.json b/src/library_desugar/jdk11/desugar_jdk_libs.json
index 6991778..7aee278 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs.json
@@ -1,6 +1,6 @@
 {
   "identifier": "com.tools.android:desugar_jdk_libs_configuration:2.0.4",
-  "configuration_format_version": 100,
+  "configuration_format_version": 101,
   "required_compilation_api_level": 30,
   "synthesized_library_classes_package_prefix": "j$.",
   "support_all_callbacks_from_library": true,
@@ -192,20 +192,92 @@
         "java.io.UncheckedIOException"
       ],
       "emulate_interface": {
-        "java.lang.Iterable": "j$.lang.Iterable",
-        "java.util.Collection": "j$.util.Collection",
-        "java.util.Comparator": "j$.util.Comparator",
-        "java.util.Iterator": "j$.util.Iterator",
-        "java.util.List": "j$.util.List",
-        "java.util.Map": "j$.util.Map",
-        "java.util.Map$Entry": "j$.util.Map$Entry",
-        "java.util.Set": "j$.util.Set",
-        "java.util.SortedSet": "j$.util.SortedSet",
-        "java.util.concurrent.ConcurrentMap": "j$.util.concurrent.ConcurrentMap"
+        "java.lang.Iterable": {
+          "rewrittenType": "j$.lang.Iterable",
+          "emulatedMethods": [
+            "java.util.Spliterator java.lang.Iterable#spliterator()",
+            "void java.lang.Iterable#forEach(java.util.function.Consumer)"
+          ]
+        },
+        "java.util.concurrent.ConcurrentMap": {
+          "rewrittenType": "j$.util.concurrent.ConcurrentMap",
+          "emulatedMethods": [
+            "void java.util.concurrent.ConcurrentMap#forEach(java.util.function.BiConsumer)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#getOrDefault(java.lang.Object, java.lang.Object)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#computeIfAbsent(java.lang.Object, java.util.function.Function)",
+            "void java.util.concurrent.ConcurrentMap#replaceAll(java.util.function.BiFunction)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#compute(java.lang.Object, java.util.function.BiFunction)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#computeIfPresent(java.lang.Object, java.util.function.BiFunction)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#merge(java.lang.Object, java.lang.Object, java.util.function.BiFunction)"
+          ]
+        },
+        "java.util.List": {
+          "rewrittenType": "j$.util.List",
+          "emulatedMethods": [
+            "java.util.Spliterator java.util.List#spliterator()",
+            "void java.util.List#sort(java.util.Comparator)",
+            "void java.util.List#replaceAll(java.util.function.UnaryOperator)"
+          ]
+        },
+        "java.util.Map": {
+          "rewrittenType": "j$.util.Map",
+          "emulatedMethods": [
+            "java.lang.Object java.util.Map#merge(java.lang.Object, java.lang.Object, java.util.function.BiFunction)",
+            "java.lang.Object java.util.Map#putIfAbsent(java.lang.Object, java.lang.Object)",
+            "void java.util.Map#forEach(java.util.function.BiConsumer)",
+            "void java.util.Map#replaceAll(java.util.function.BiFunction)",
+            "java.lang.Object java.util.Map#computeIfAbsent(java.lang.Object, java.util.function.Function)",
+            "java.lang.Object java.util.Map#compute(java.lang.Object, java.util.function.BiFunction)",
+            "java.lang.Object java.util.Map#computeIfPresent(java.lang.Object, java.util.function.BiFunction)",
+            "boolean java.util.Map#remove(java.lang.Object, java.lang.Object)",
+            "boolean java.util.Map#replace(java.lang.Object, java.lang.Object, java.lang.Object)",
+            "java.lang.Object java.util.Map#replace(java.lang.Object, java.lang.Object)",
+            "java.lang.Object java.util.Map#getOrDefault(java.lang.Object, java.lang.Object)"
+          ]
+        },
+        "java.util.Collection": {
+          "rewrittenType": "j$.util.Collection",
+          "emulatedMethods": [
+            "java.util.stream.Stream java.util.Collection#stream()",
+            "java.util.stream.Stream java.util.Collection#parallelStream()",
+            "java.util.Spliterator java.util.Collection#spliterator()",
+            "boolean java.util.Collection#removeIf(java.util.function.Predicate)"
+          ]
+        },
+        "java.util.Iterator": {
+          "rewrittenType": "j$.util.Iterator",
+          "emulatedMethods": [
+            "void java.util.Iterator#forEachRemaining(java.util.function.Consumer)"
+          ]
+        },
+        "java.util.Map$Entry": {
+          "rewrittenType": "j$.util.Map$Entry"
+        },
+        "java.util.Set": {
+          "rewrittenType": "j$.util.Set",
+          "emulatedMethods": [
+            "java.util.Spliterator java.util.Set#spliterator()"
+          ]
+        },
+        "java.util.Comparator": {
+          "rewrittenType": "j$.util.Comparator",
+          "emulatedMethods": [
+            "java.util.Comparator java.util.Comparator#thenComparingDouble(java.util.function.ToDoubleFunction)",
+            "java.util.Comparator java.util.Comparator#thenComparingInt(java.util.function.ToIntFunction)",
+            "java.util.Comparator java.util.Comparator#reversed()",
+            "java.util.Comparator java.util.Comparator#thenComparing(java.util.function.Function, java.util.Comparator)",
+            "java.util.Comparator java.util.Comparator#thenComparingLong(java.util.function.ToLongFunction)",
+            "java.util.Comparator java.util.Comparator#thenComparing(java.util.Comparator)",
+            "java.util.Comparator java.util.Comparator#thenComparing(java.util.function.Function)"
+          ]
+        },
+        "java.util.SortedSet": {
+          "rewrittenType": "j$.util.SortedSet",
+          "emulatedMethods": [
+            "java.util.Spliterator java.util.SortedSet#spliterator()"
+          ]
+        }
       },
-      "dont_rewrite": [
-        "void java.util.Iterator#remove()"
-      ],
       "retarget_method": {
         "java.util.Spliterator java.util.Arrays#spliterator(java.lang.Object[])": "java.util.DesugarArrays",
         "java.util.Spliterator java.util.Arrays#spliterator(java.lang.Object[], int, int)": "java.util.DesugarArrays",
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs_human_comments.md b/src/library_desugar/jdk11/desugar_jdk_libs_human_comments.md
index 9f79e04..5e59f31 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs_human_comments.md
+++ b/src/library_desugar/jdk11/desugar_jdk_libs_human_comments.md
@@ -232,11 +232,6 @@
 the code for the default and static methods, and a dispatch class which hold the
 code to support emulated dispatch for the default methods.
 
-### Flag dont_rewrite
-
-`methodNotToRewrite`
-D8/R8 ignroes the methods present here from the emulated interface.
-
 ### Flag wrapper_conversion
 
 `type`
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs_minimal.json b/src/library_desugar/jdk11/desugar_jdk_libs_minimal.json
index b0dc30e..d69ed9a 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs_minimal.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs_minimal.json
@@ -1,6 +1,6 @@
 {
   "identifier": "com.tools.android:desugar_jdk_libs_configuration_minimal:2.0.4",
-  "configuration_format_version": 100,
+  "configuration_format_version": 101,
   "required_compilation_api_level": 24,
   "synthesized_library_classes_package_prefix": "j$.",
   "support_all_callbacks_from_library": false,
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs_nio.json b/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
index ebeda3f..a22391e 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
@@ -1,6 +1,6 @@
 {
   "identifier": "com.tools.android:desugar_jdk_libs_configuration_nio:2.0.4",
-  "configuration_format_version": 100,
+  "configuration_format_version": 101,
   "required_compilation_api_level": 30,
   "synthesized_library_classes_package_prefix": "j$.",
   "support_all_callbacks_from_library": true,
@@ -347,16 +347,91 @@
         "java.nio.channels.SeekableByteChannel"
       ],
       "emulate_interface": {
-        "java.lang.Iterable": "j$.lang.Iterable",
-        "java.util.Collection": "j$.util.Collection",
-        "java.util.Comparator": "j$.util.Comparator",
-        "java.util.Iterator": "j$.util.Iterator",
-        "java.util.List": "j$.util.List",
-        "java.util.Map": "j$.util.Map",
-        "java.util.Map$Entry": "j$.util.Map$Entry",
-        "java.util.Set": "j$.util.Set",
-        "java.util.SortedSet": "j$.util.SortedSet",
-        "java.util.concurrent.ConcurrentMap": "j$.util.concurrent.ConcurrentMap"
+        "java.lang.Iterable": {
+          "rewrittenType": "j$.lang.Iterable",
+          "emulatedMethods": [
+            "java.util.Spliterator java.lang.Iterable#spliterator()",
+            "void java.lang.Iterable#forEach(java.util.function.Consumer)"
+          ]
+        },
+        "java.util.concurrent.ConcurrentMap": {
+          "rewrittenType": "j$.util.concurrent.ConcurrentMap",
+          "emulatedMethods": [
+            "void java.util.concurrent.ConcurrentMap#forEach(java.util.function.BiConsumer)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#getOrDefault(java.lang.Object, java.lang.Object)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#computeIfAbsent(java.lang.Object, java.util.function.Function)",
+            "void java.util.concurrent.ConcurrentMap#replaceAll(java.util.function.BiFunction)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#compute(java.lang.Object, java.util.function.BiFunction)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#computeIfPresent(java.lang.Object, java.util.function.BiFunction)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#merge(java.lang.Object, java.lang.Object, java.util.function.BiFunction)"
+          ]
+        },
+        "java.util.List": {
+          "rewrittenType": "j$.util.List",
+          "emulatedMethods": [
+            "java.util.Spliterator java.util.List#spliterator()",
+            "void java.util.List#sort(java.util.Comparator)",
+            "void java.util.List#replaceAll(java.util.function.UnaryOperator)"
+          ]
+        },
+        "java.util.Map": {
+          "rewrittenType": "j$.util.Map",
+          "emulatedMethods": [
+            "java.lang.Object java.util.Map#merge(java.lang.Object, java.lang.Object, java.util.function.BiFunction)",
+            "java.lang.Object java.util.Map#putIfAbsent(java.lang.Object, java.lang.Object)",
+            "void java.util.Map#forEach(java.util.function.BiConsumer)",
+            "void java.util.Map#replaceAll(java.util.function.BiFunction)",
+            "java.lang.Object java.util.Map#computeIfAbsent(java.lang.Object, java.util.function.Function)",
+            "java.lang.Object java.util.Map#compute(java.lang.Object, java.util.function.BiFunction)",
+            "java.lang.Object java.util.Map#computeIfPresent(java.lang.Object, java.util.function.BiFunction)",
+            "boolean java.util.Map#remove(java.lang.Object, java.lang.Object)",
+            "boolean java.util.Map#replace(java.lang.Object, java.lang.Object, java.lang.Object)",
+            "java.lang.Object java.util.Map#replace(java.lang.Object, java.lang.Object)",
+            "java.lang.Object java.util.Map#getOrDefault(java.lang.Object, java.lang.Object)"
+          ]
+        },
+        "java.util.Collection": {
+          "rewrittenType": "j$.util.Collection",
+          "emulatedMethods": [
+            "java.util.stream.Stream java.util.Collection#stream()",
+            "java.util.stream.Stream java.util.Collection#parallelStream()",
+            "java.util.Spliterator java.util.Collection#spliterator()",
+            "boolean java.util.Collection#removeIf(java.util.function.Predicate)"
+          ]
+        },
+        "java.util.Iterator": {
+          "rewrittenType": "j$.util.Iterator",
+          "emulatedMethods": [
+            "void java.util.Iterator#forEachRemaining(java.util.function.Consumer)"
+          ]
+        },
+        "java.util.Map$Entry": {
+          "rewrittenType": "j$.util.Map$Entry"
+        },
+        "java.util.Set": {
+          "rewrittenType": "j$.util.Set",
+          "emulatedMethods": [
+            "java.util.Spliterator java.util.Set#spliterator()"
+          ]
+        },
+        "java.util.Comparator": {
+          "rewrittenType": "j$.util.Comparator",
+          "emulatedMethods": [
+            "java.util.Comparator java.util.Comparator#thenComparingDouble(java.util.function.ToDoubleFunction)",
+            "java.util.Comparator java.util.Comparator#thenComparingInt(java.util.function.ToIntFunction)",
+            "java.util.Comparator java.util.Comparator#reversed()",
+            "java.util.Comparator java.util.Comparator#thenComparing(java.util.function.Function, java.util.Comparator)",
+            "java.util.Comparator java.util.Comparator#thenComparingLong(java.util.function.ToLongFunction)",
+            "java.util.Comparator java.util.Comparator#thenComparing(java.util.Comparator)",
+            "java.util.Comparator java.util.Comparator#thenComparing(java.util.function.Function)"
+          ]
+        },
+        "java.util.SortedSet": {
+          "rewrittenType": "j$.util.SortedSet",
+          "emulatedMethods": [
+            "java.util.Spliterator java.util.SortedSet#spliterator()"
+          ]
+        }
       },
       "dont_rewrite": [
         "void java.util.Iterator#remove()"