Introduce path json file

- fix precondition missing in legacy jdk11 json

We now have 5 files:
- legacy for the legacy specification
- minimal for minimal specification
- the time + stream specification
- the extended version with path developed in R8
- the extended version with path available in Google3

Change-Id: Ic354fd8aa3997eab7ba884beb61f6c68c31ce1fd
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs.json b/src/library_desugar/jdk11/desugar_jdk_libs.json
index c2cea80..6893b8f 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs.json
@@ -6,20 +6,6 @@
   "support_all_callbacks_from_library": true,
   "common_flags": [
     {
-      "api_level_below_or_equal": 32,
-      "rewrite_prefix": {
-        "java.net.URLDecoder": "j$.net.URLDecoder",
-        "java.net.URLEncoder": "j$.net.URLEncoder",
-        "java.io.DesugarInputStream": "j$.io.DesugarInputStream"
-      },
-      "retarget_method_with_emulated_dispatch": {
-        "long java.io.InputStream#transferTo(java.io.OutputStream)": "java.io.DesugarInputStream"
-      },
-      "amend_library_method": [
-        "public long java.io.InputStream#transferTo(java.io.OutputStream)"
-      ]
-    },
-    {
       "api_level_below_or_equal": 30,
       "rewrite_prefix": {
         "java.time.": "j$.time.",
@@ -175,16 +161,6 @@
         "java.util.OptionalInt": "java.util.OptionalConversions",
         "java.util.OptionalLong": "java.util.OptionalConversions"
       }
-    },
-    {
-      "api_level_below_or_equal": 18,
-      "rewrite_prefix": {
-        "java.lang.DesugarCharacter": "j$.lang.DesugarCharacter",
-        "java.nio.charset.StandardCharsets": "j$.nio.charset.StandardCharsets"
-      },
-      "retarget_method": {
-        "boolean java.lang.Character#isBmpCodePoint(int)": "java.lang.DesugarCharacter"
-      }
     }
   ],
   "program_flags": [
@@ -215,76 +191,32 @@
         "long java.util.concurrent.atomic.AtomicLong#getAndUpdate(java.util.function.LongUnaryOperator)": "java.util.concurrent.atomic.DesugarAtomicLong",
         "long java.util.concurrent.atomic.AtomicLong#updateAndGet(java.util.function.LongUnaryOperator)": "java.util.concurrent.atomic.DesugarAtomicLong"
       }
-    },
-    {
-      "api_level_below_or_equal": 19,
-      "dont_retarget": [
-        "android.support.multidex.MultiDexExtractor$ExtractedDex"
-      ]
     }
   ],
   "library_flags": [
     {
-      "api_level_below_or_equal": 32,
-      "rewrite_prefix": {
-        "desugar.": "j$.desugar.",
-        "libcore.": "j$.libcore.",
-        "java.lang.Desugar": "j$.lang.Desugar",
-        "java.lang.ref.Cleaner": "j$.lang.ref.Cleaner",
-        "sun.security.action.": "j$.sun.security.action."
-      }
-    },
-    {
       "api_level_below_or_equal": 30,
+      "rewrite_prefix": {
+        "jdk.internal.": "j$.jdk.internal.",
+        "sun.security.action.": "j$.sun.security.action.",
+        "sun.misc.Desugar": "j$.sun.misc.Desugar"
+      },
       "rewrite_derived_prefix": {
         "java.time.": {
           "j$.time.": "java.time."
         }
-      }
-    },
-    {
-      "api_level_below_or_equal": 25,
-      "rewrite_prefix": {
-        "java.io.DesugarFile": "j$.io.DesugarFile",
-        "java.nio.channels.AsynchronousChannel": "j$.nio.channels.AsynchronousChannel",
-        "java.nio.channels.AsynchronousFileChannel": "j$.nio.channels.AsynchronousFileChannel",
-        "java.nio.channels.CompletionHandler": "j$.nio.channels.CompletionHandler",
-        "java.nio.channels.Desugar": "j$.nio.channels.Desugar",
-        "java.nio.file.": "j$.nio.file.",
-        "jdk.internal.": "j$.jdk.internal.",
-        "sun.misc.Desugar": "j$.sun.misc.Desugar",
-        "sun.nio.cs.": "j$.sun.nio.cs.",
-        "sun.nio.fs.AbstractFileSystemProvider": "j$.sun.nio.fs.AbstractFileSystemProvider",
-        "sun.nio.fs.AbstractFileTypeDetector": "j$.sun.nio.fs.AbstractFileTypeDetector",
-        "sun.nio.fs.BasicFileAttributesHolder": "j$.sun.nio.fs.BasicFileAttributesHolder",
-        "sun.nio.fs.DynamicFileAttributeView": "j$.sun.nio.fs.DynamicFileAttributeView",
-        "sun.util.PreHashedMap": "j$.sun.util.PreHashedMap",
-        "wrapper." : "j$.wrapper."
-      },
-      "rewrite_derived_prefix": {
-        "java.nio.file.attribute.FileTime": {
-          "j$.nio.file.attribute.FileTime": "java.nio.file.attribute.FileTime"
-        },
-        "java.io.": {
-          "__wrapper__.j$.io.": "j$.io.",
-          "__wrapper__.java.io.": "java.io."
-        },
-        "java.nio.": {
-          "__wrapper__.j$.nio.": "j$.nio.",
-          "__wrapper__.java.nio.": "java.nio."
-        }
-      },
-      "retarget_method": {
-        "boolean java.util.Arrays#deepEquals0(java.lang.Object, java.lang.Object)": "java.util.DesugarArrays"
-      },
-      "retarget_method_with_emulated_dispatch": {
-        "java.nio.file.Path java.io.File#toPath()": "java.io.DesugarFile"
       },
       "backport": {
         "java.lang.DesugarDouble": "java.lang.Double",
         "java.lang.DesugarInteger": "java.lang.Integer",
         "java.lang.DesugarLong": "java.lang.Long",
         "java.lang.DesugarMath": "java.lang.Math"
+      }
+    },
+    {
+      "api_level_below_or_equal": 25,
+      "retarget_method": {
+        "boolean java.util.Arrays#deepEquals0(java.lang.Object, java.lang.Object)": "java.util.DesugarArrays"
       },
       "amend_library_method": [
         "private static boolean java.util.Arrays#deepEquals0(java.lang.Object, java.lang.Object)"
@@ -293,8 +225,6 @@
     {
       "api_level_below_or_equal": 23,
       "rewrite_prefix": {
-        "java.lang.FunctionalInterface": "j$.lang.FunctionalInterface",
-        "java.nio.channels.SeekableByteChannel": "j$.nio.channels.SeekableByteChannel",
         "java.util.AbstractList": "j$.util.AbstractList",
         "java.util.CollSer": "j$.util.CollSer",
         "java.util.Comparators": "j$.util.Comparators",
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs_legacy.json b/src/library_desugar/jdk11/desugar_jdk_libs_legacy.json
index 1985550..730a294 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs_legacy.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs_legacy.json
@@ -170,6 +170,7 @@
       "api_level_below_or_equal": 30,
       "rewrite_prefix": {
         "j$.time.": "java.time.",
+        "jdk.internal.": "j$.jdk.internal.",
         "sun.misc.Desugar": "j$.sun.misc.Desugar",
         "sun.security.action.": "j$.sun.security.action."
       },
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs_path.json b/src/library_desugar/jdk11/desugar_jdk_libs_path.json
new file mode 100644
index 0000000..c2cea80
--- /dev/null
+++ b/src/library_desugar/jdk11/desugar_jdk_libs_path.json
@@ -0,0 +1,339 @@
+{
+  "identifier": "com.tools.android:desugar_jdk_libs:2.0.0",
+  "configuration_format_version": 100,
+  "required_compilation_api_level": 30,
+  "synthesized_library_classes_package_prefix": "j$.",
+  "support_all_callbacks_from_library": true,
+  "common_flags": [
+    {
+      "api_level_below_or_equal": 32,
+      "rewrite_prefix": {
+        "java.net.URLDecoder": "j$.net.URLDecoder",
+        "java.net.URLEncoder": "j$.net.URLEncoder",
+        "java.io.DesugarInputStream": "j$.io.DesugarInputStream"
+      },
+      "retarget_method_with_emulated_dispatch": {
+        "long java.io.InputStream#transferTo(java.io.OutputStream)": "java.io.DesugarInputStream"
+      },
+      "amend_library_method": [
+        "public long java.io.InputStream#transferTo(java.io.OutputStream)"
+      ]
+    },
+    {
+      "api_level_below_or_equal": 30,
+      "rewrite_prefix": {
+        "java.time.": "j$.time.",
+        "java.util.Desugar": "j$.util.Desugar"
+      },
+      "retarget_method": {
+        "java.util.TimeZone java.util.TimeZone#getTimeZone(java.time.ZoneId)": "java.util.DesugarTimeZone"
+      },
+      "retarget_method_with_emulated_dispatch": {
+        "java.time.Instant java.util.Date#toInstant()": "java.util.DesugarDate",
+        "java.time.ZoneId java.util.TimeZone#toZoneId()": "java.util.DesugarTimeZone",
+        "java.time.ZonedDateTime java.util.GregorianCalendar#toZonedDateTime()": "java.util.DesugarGregorianCalendar"
+      },
+      "wrapper_conversion": [
+        "java.time.Clock"
+      ],
+      "custom_conversion": {
+        "java.time.Duration": "java.time.TimeConversions",
+        "java.time.Instant": "java.time.TimeConversions",
+        "java.time.LocalDate": "java.time.TimeConversions",
+        "java.time.MonthDay": "java.time.TimeConversions",
+        "java.time.ZoneId": "java.time.TimeConversions",
+        "java.time.ZonedDateTime": "java.time.TimeConversions"
+      }
+    },
+    {
+      "api_level_below_or_equal": 29,
+      "rewrite_prefix": {
+        "java.util.concurrent.Flow": "j$.util.concurrent.Flow"
+      }
+    },
+    {
+      "api_level_below_or_equal": 23,
+      "rewrite_prefix": {
+        "java.io.DesugarBufferedReader": "j$.io.DesugarBufferedReader",
+        "java.util.DoubleSummaryStatistics": "j$.util.DoubleSummaryStatistics",
+        "java.util.IntSummaryStatistics": "j$.util.IntSummaryStatistics",
+        "java.util.LongSummaryStatistics": "j$.util.LongSummaryStatistics",
+        "java.util.Objects": "j$.util.Objects",
+        "java.util.Optional": "j$.util.Optional",
+        "java.util.PrimitiveIterator": "j$.util.PrimitiveIterator",
+        "java.util.Spliterator": "j$.util.Spliterator",
+        "java.util.StringJoiner": "j$.util.StringJoiner",
+        "java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap",
+        "java.util.concurrent.ThreadLocalRandom": "j$.util.concurrent.ThreadLocalRandom",
+        "java.util.concurrent.atomic.DesugarAtomic": "j$.util.concurrent.atomic.DesugarAtomic",
+        "java.util.function.": "j$.util.function.",
+        "java.util.stream.": "j$.util.stream."
+      },
+      "maintain_prefix": [
+        "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"
+      },
+      "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",
+        "java.util.Spliterator$OfDouble java.util.Arrays#spliterator(double[])": "java.util.DesugarArrays",
+        "java.util.Spliterator$OfDouble java.util.Arrays#spliterator(double[], int, int)": "java.util.DesugarArrays",
+        "java.util.Spliterator$OfInt java.util.Arrays#spliterator(int[])": "java.util.DesugarArrays",
+        "java.util.Spliterator$OfInt java.util.Arrays#spliterator(int[], int, int)": "java.util.DesugarArrays",
+        "java.util.Spliterator$OfLong java.util.Arrays#spliterator(long[])": "java.util.DesugarArrays",
+        "java.util.Spliterator$OfLong java.util.Arrays#spliterator(long[], int, int)": "java.util.DesugarArrays",
+        "java.util.stream.DoubleStream java.util.Arrays#stream(double[])": "java.util.DesugarArrays",
+        "java.util.stream.DoubleStream java.util.Arrays#stream(double[], int, int)": "java.util.DesugarArrays",
+        "java.util.stream.IntStream java.util.Arrays#stream(int[])": "java.util.DesugarArrays",
+        "java.util.stream.IntStream java.util.Arrays#stream(int[], int, int)": "java.util.DesugarArrays",
+        "java.util.stream.LongStream java.util.Arrays#stream(long[])": "java.util.DesugarArrays",
+        "java.util.stream.LongStream java.util.Arrays#stream(long[], int, int)": "java.util.DesugarArrays",
+        "java.util.stream.Stream java.util.Arrays#stream(java.lang.Object[])": "java.util.DesugarArrays",
+        "java.util.stream.Stream java.util.Arrays#stream(java.lang.Object[], int, int)": "java.util.DesugarArrays"
+      },
+      "retarget_method_with_emulated_dispatch": {
+        "java.util.stream.Stream java.io.BufferedReader#lines()": "java.io.DesugarBufferedReader",
+        "java.util.Spliterator java.util.LinkedHashSet#spliterator()": "java.util.DesugarLinkedHashSet"
+      },
+      "wrapper_conversion": [
+        "java.util.function.IntUnaryOperator",
+        "java.util.function.BiFunction",
+        "java.util.function.IntConsumer",
+        "java.util.function.IntBinaryOperator",
+        "java.util.function.UnaryOperator",
+        "java.util.function.DoubleConsumer",
+        "java.util.function.IntPredicate",
+        "java.util.Spliterator$OfLong",
+        "java.util.stream.Collector",
+        "java.util.function.LongPredicate",
+        "java.util.function.ToLongFunction",
+        "java.util.function.LongToDoubleFunction",
+        "java.util.PrimitiveIterator$OfInt",
+        "java.util.function.LongToIntFunction",
+        "java.util.function.Predicate",
+        "java.util.Spliterator$OfPrimitive",
+        "java.util.function.DoubleToIntFunction",
+        "java.util.function.ObjDoubleConsumer",
+        "java.util.function.BinaryOperator",
+        "java.util.stream.DoubleStream",
+        "java.util.Spliterator$OfInt",
+        "java.util.stream.Stream",
+        "java.util.function.ObjLongConsumer",
+        "java.util.function.ToDoubleFunction",
+        "java.util.stream.IntStream",
+        "java.util.function.LongBinaryOperator",
+        "java.util.Spliterator$OfDouble",
+        "java.util.function.DoubleFunction",
+        "java.util.function.ObjIntConsumer",
+        "java.util.function.Function",
+        "java.util.function.Supplier",
+        "java.util.function.DoubleUnaryOperator",
+        "java.util.function.BiPredicate",
+        "java.util.PrimitiveIterator$OfDouble",
+        "java.util.function.DoubleBinaryOperator",
+        "java.util.PrimitiveIterator$OfLong",
+        "java.util.function.BiConsumer",
+        "java.util.function.IntFunction",
+        "java.util.stream.LongStream",
+        "java.util.function.IntToDoubleFunction",
+        "java.util.function.LongFunction",
+        "java.util.function.ToIntFunction",
+        "java.util.function.LongConsumer",
+        "java.util.function.Consumer",
+        "java.util.function.IntToLongFunction",
+        "java.util.function.DoubleToLongFunction",
+        "java.util.function.LongUnaryOperator",
+        "java.util.stream.BaseStream",
+        "java.util.function.DoublePredicate"
+      ],
+      "wrapper_conversion_excluding": {
+        "java.util.Spliterator": [
+          "boolean java.util.Spliterator#hasCharacteristics(int)",
+          "long java.util.Spliterator#getExactSizeIfKnown()"
+        ]
+      },
+      "custom_conversion": {
+        "java.util.DoubleSummaryStatistics": "java.util.DoubleSummaryStatisticsConversions",
+        "java.util.IntSummaryStatistics": "java.util.IntSummaryStatisticsConversions",
+        "java.util.LongSummaryStatistics": "java.util.LongSummaryStatisticsConversions",
+        "java.util.Optional": "java.util.OptionalConversions",
+        "java.util.OptionalDouble": "java.util.OptionalConversions",
+        "java.util.OptionalInt": "java.util.OptionalConversions",
+        "java.util.OptionalLong": "java.util.OptionalConversions"
+      }
+    },
+    {
+      "api_level_below_or_equal": 18,
+      "rewrite_prefix": {
+        "java.lang.DesugarCharacter": "j$.lang.DesugarCharacter",
+        "java.nio.charset.StandardCharsets": "j$.nio.charset.StandardCharsets"
+      },
+      "retarget_method": {
+        "boolean java.lang.Character#isBmpCodePoint(int)": "java.lang.DesugarCharacter"
+      }
+    }
+  ],
+  "program_flags": [
+    {
+      "api_level_below_or_equal": 30,
+      "retarget_method": {
+        "java.time.Instant java.util.Calendar#toInstant()": "java.util.DesugarCalendar",
+        "java.util.Date java.util.Date#from(java.time.Instant)": "java.util.DesugarDate",
+        "java.util.GregorianCalendar java.util.GregorianCalendar#from(java.time.ZonedDateTime)": "java.util.DesugarGregorianCalendar",
+        "java.util.TimeZone java.util.TimeZone#getTimeZone(java.lang.String)": "java.util.DesugarTimeZone"
+      }
+    },
+    {
+      "api_level_below_or_equal": 23,
+      "retarget_method": {
+        "int java.util.concurrent.atomic.AtomicInteger#accumulateAndGet(int, java.util.function.IntBinaryOperator)": "java.util.concurrent.atomic.DesugarAtomicInteger",
+        "int java.util.concurrent.atomic.AtomicInteger#getAndAccumulate(int, java.util.function.IntBinaryOperator)": "java.util.concurrent.atomic.DesugarAtomicInteger",
+        "int java.util.concurrent.atomic.AtomicInteger#getAndUpdate(java.util.function.IntUnaryOperator)": "java.util.concurrent.atomic.DesugarAtomicInteger",
+        "int java.util.concurrent.atomic.AtomicInteger#updateAndGet(java.util.function.IntUnaryOperator)": "java.util.concurrent.atomic.DesugarAtomicInteger",
+        "java.lang.Object java.util.concurrent.atomic.AtomicReference#accumulateAndGet(java.lang.Object, java.util.function.BinaryOperator)": "java.util.concurrent.atomic.DesugarAtomicReference",
+        "java.lang.Object java.util.concurrent.atomic.AtomicReference#getAndAccumulate(java.lang.Object, java.util.function.BinaryOperator)": "java.util.concurrent.atomic.DesugarAtomicReference",
+        "java.lang.Object java.util.concurrent.atomic.AtomicReference#getAndUpdate(java.util.function.UnaryOperator)": "java.util.concurrent.atomic.DesugarAtomicReference",
+        "java.lang.Object java.util.concurrent.atomic.AtomicReference#updateAndGet(java.util.function.UnaryOperator)": "java.util.concurrent.atomic.DesugarAtomicReference",
+        "java.util.Map java.util.Collections#synchronizedMap(java.util.Map)": "java.util.DesugarCollections",
+        "java.util.SortedMap java.util.Collections#synchronizedSortedMap(java.util.SortedMap)": "java.util.DesugarCollections",
+        "long java.util.concurrent.atomic.AtomicLong#accumulateAndGet(long, java.util.function.LongBinaryOperator)": "java.util.concurrent.atomic.DesugarAtomicLong",
+        "long java.util.concurrent.atomic.AtomicLong#getAndAccumulate(long, java.util.function.LongBinaryOperator)": "java.util.concurrent.atomic.DesugarAtomicLong",
+        "long java.util.concurrent.atomic.AtomicLong#getAndUpdate(java.util.function.LongUnaryOperator)": "java.util.concurrent.atomic.DesugarAtomicLong",
+        "long java.util.concurrent.atomic.AtomicLong#updateAndGet(java.util.function.LongUnaryOperator)": "java.util.concurrent.atomic.DesugarAtomicLong"
+      }
+    },
+    {
+      "api_level_below_or_equal": 19,
+      "dont_retarget": [
+        "android.support.multidex.MultiDexExtractor$ExtractedDex"
+      ]
+    }
+  ],
+  "library_flags": [
+    {
+      "api_level_below_or_equal": 32,
+      "rewrite_prefix": {
+        "desugar.": "j$.desugar.",
+        "libcore.": "j$.libcore.",
+        "java.lang.Desugar": "j$.lang.Desugar",
+        "java.lang.ref.Cleaner": "j$.lang.ref.Cleaner",
+        "sun.security.action.": "j$.sun.security.action."
+      }
+    },
+    {
+      "api_level_below_or_equal": 30,
+      "rewrite_derived_prefix": {
+        "java.time.": {
+          "j$.time.": "java.time."
+        }
+      }
+    },
+    {
+      "api_level_below_or_equal": 25,
+      "rewrite_prefix": {
+        "java.io.DesugarFile": "j$.io.DesugarFile",
+        "java.nio.channels.AsynchronousChannel": "j$.nio.channels.AsynchronousChannel",
+        "java.nio.channels.AsynchronousFileChannel": "j$.nio.channels.AsynchronousFileChannel",
+        "java.nio.channels.CompletionHandler": "j$.nio.channels.CompletionHandler",
+        "java.nio.channels.Desugar": "j$.nio.channels.Desugar",
+        "java.nio.file.": "j$.nio.file.",
+        "jdk.internal.": "j$.jdk.internal.",
+        "sun.misc.Desugar": "j$.sun.misc.Desugar",
+        "sun.nio.cs.": "j$.sun.nio.cs.",
+        "sun.nio.fs.AbstractFileSystemProvider": "j$.sun.nio.fs.AbstractFileSystemProvider",
+        "sun.nio.fs.AbstractFileTypeDetector": "j$.sun.nio.fs.AbstractFileTypeDetector",
+        "sun.nio.fs.BasicFileAttributesHolder": "j$.sun.nio.fs.BasicFileAttributesHolder",
+        "sun.nio.fs.DynamicFileAttributeView": "j$.sun.nio.fs.DynamicFileAttributeView",
+        "sun.util.PreHashedMap": "j$.sun.util.PreHashedMap",
+        "wrapper." : "j$.wrapper."
+      },
+      "rewrite_derived_prefix": {
+        "java.nio.file.attribute.FileTime": {
+          "j$.nio.file.attribute.FileTime": "java.nio.file.attribute.FileTime"
+        },
+        "java.io.": {
+          "__wrapper__.j$.io.": "j$.io.",
+          "__wrapper__.java.io.": "java.io."
+        },
+        "java.nio.": {
+          "__wrapper__.j$.nio.": "j$.nio.",
+          "__wrapper__.java.nio.": "java.nio."
+        }
+      },
+      "retarget_method": {
+        "boolean java.util.Arrays#deepEquals0(java.lang.Object, java.lang.Object)": "java.util.DesugarArrays"
+      },
+      "retarget_method_with_emulated_dispatch": {
+        "java.nio.file.Path java.io.File#toPath()": "java.io.DesugarFile"
+      },
+      "backport": {
+        "java.lang.DesugarDouble": "java.lang.Double",
+        "java.lang.DesugarInteger": "java.lang.Integer",
+        "java.lang.DesugarLong": "java.lang.Long",
+        "java.lang.DesugarMath": "java.lang.Math"
+      },
+      "amend_library_method": [
+        "private static boolean java.util.Arrays#deepEquals0(java.lang.Object, java.lang.Object)"
+      ]
+    },
+    {
+      "api_level_below_or_equal": 23,
+      "rewrite_prefix": {
+        "java.lang.FunctionalInterface": "j$.lang.FunctionalInterface",
+        "java.nio.channels.SeekableByteChannel": "j$.nio.channels.SeekableByteChannel",
+        "java.util.AbstractList": "j$.util.AbstractList",
+        "java.util.CollSer": "j$.util.CollSer",
+        "java.util.Comparators": "j$.util.Comparators",
+        "java.util.ImmutableCollections": "j$.util.ImmutableCollections",
+        "java.util.KeyValueHolder": "j$.util.KeyValueHolder",
+        "java.util.SortedSet$1": "j$.util.SortedSet$1",
+        "java.util.Tripwire": "j$.util.Tripwire",
+        "java.util.concurrent.Helpers": "j$.util.concurrent.Helpers"
+      },
+      "rewrite_derived_prefix": {
+        "java.util.DoubleSummaryStatistics": {
+          "j$.util.DoubleSummaryStatistics": "java.util.DoubleSummaryStatistics"
+        },
+        "java.util.IntSummaryStatistics": {
+          "j$.util.IntSummaryStatistics": "java.util.IntSummaryStatistics"
+        },
+        "java.util.LongSummaryStatistics": {
+          "j$.util.LongSummaryStatistics": "java.util.LongSummaryStatistics"
+        },
+        "java.util.Optional": {
+          "j$.util.Optional": "java.util.Optional"
+        }
+      }
+    }
+  ],
+  "shrinker_config": [
+    "-keepclassmembers class j$.util.concurrent.ConcurrentHashMap$TreeBin { int lockState; }",
+    "-keepclassmembers class j$.util.concurrent.ConcurrentHashMap { int sizeCtl; int transferIndex; long baseCount; int cellsBusy; }",
+    "-keepclassmembers class j$.util.concurrent.ConcurrentHashMap { private void readObject(java.io.ObjectInputStream); private void writeObject(java.io.ObjectOutputStream); private void readObjectNoData(); private static final java.io.ObjectStreamField[] serialPersistentFields; private static final long serialVersionUID;}",
+    "-keepclassmembers class j$.util.concurrent.ConcurrentHashMap$CounterCell { long value; }",
+    "-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); public static final !synthetic <fields>; }",
+    "-keeppackagenames j$.**",
+    "-keepclassmembers class j$.util.IntSummaryStatistics { long count; long sum; int min; int max; }",
+    "-keepclassmembers class j$.util.LongSummaryStatistics { long count; long sum; long min; long max; }",
+    "-keepclassmembers class j$.util.DoubleSummaryStatistics { long count; double sum; double min; double max; }",
+    "-keepattributes Signature",
+    "-keepattributes EnclosingMethod",
+    "-keepattributes InnerClasses",
+    "-dontwarn sun.misc.Unsafe",
+    "-dontwarn wrapper.**"
+  ]
+}
\ No newline at end of file
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs_alternative_3.json b/src/library_desugar/jdk11/desugar_jdk_libs_path_alternative_3.json
similarity index 100%
rename from src/library_desugar/jdk11/desugar_jdk_libs_alternative_3.json
rename to src/library_desugar/jdk11/desugar_jdk_libs_path_alternative_3.json
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 7bcdfb6..88ca62c 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -209,7 +209,7 @@
   }
 
   public static Path getDesugarLibJsonForTestingAlternative3() {
-    return Paths.get(getDesugarLibraryJsonDir(), "desugar_jdk_libs_alternative_3.json");
+    return Paths.get(getDesugarLibraryJsonDir(), "desugar_jdk_libs_path_alternative_3.json");
   }
 
   public static boolean isLocalDevelopment() {
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BufferedReaderTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BufferedReaderTest.java
index 93ea904..fbfcb18 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BufferedReaderTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BufferedReaderTest.java
@@ -7,16 +7,10 @@
 import static org.junit.Assert.assertEquals;
 
 import com.android.tools.r8.NeverInline;
-import com.android.tools.r8.StringResource;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecification;
-import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.StringUtils;
-import com.google.common.collect.ImmutableList;
 import java.io.BufferedReader;
 import java.io.StringReader;
 import java.io.UncheckedIOException;
@@ -54,28 +48,6 @@
     return StringUtils.lines("Hello", "Larry", "Page", "Caught java.io.UncheckedIOException");
   }
 
-  DesugaredLibrarySpecification configurationAlternative3(
-      InternalOptions options, boolean libraryCompilation, TestParameters parameters) {
-    // Parse the current configuration and amend the configuration for BufferedReader.lines. The
-    // configuration is the same for both program and library.
-    return DesugaredLibrarySpecificationParser.parseDesugaredLibrarySpecification(
-        StringResource.fromFile(ToolHelper.getDesugarLibJsonForTestingAlternative3()),
-        options.dexItemFactory(),
-        options.reporter,
-        libraryCompilation,
-        parameters.getApiLevel().getLevel());
-  }
-
-  private void configurationForProgramCompilation(InternalOptions options) {
-    setDesugaredLibrarySpecificationForTesting(
-        options, configurationAlternative3(options, false, parameters));
-  }
-
-  private void configurationForLibraryCompilation(InternalOptions options) {
-    setDesugaredLibrarySpecificationForTesting(
-        options, configurationAlternative3(options, true, parameters));
-  }
-
   @Test
   public void testBufferedReaderD8Cf() throws Exception {
     Assume.assumeTrue(
@@ -85,7 +57,6 @@
     // Use D8 to desugar with Java classfile output.
     Path jar =
         testForD8(Backend.CF)
-            .addOptionsModification(this::configurationForProgramCompilation)
             .addInnerClasses(BufferedReaderTest.class)
             .setMinApi(parameters.getApiLevel())
             .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
@@ -108,13 +79,7 @@
           .disableDesugaring()
           .compile()
           .addDesugaredCoreLibraryRunClassPath(
-              (apiLevel, keepRules, shrink) ->
-                  buildDesugaredLibrary(
-                      apiLevel,
-                      keepRules,
-                      shrink,
-                      ImmutableList.of(),
-                      this::configurationForLibraryCompilation),
+              this::buildDesugaredLibrary,
               parameters.getApiLevel(),
               desugaredLibraryKeepRules,
               shrinkDesugaredLibrary)
@@ -122,8 +87,7 @@
           .assertSuccessWithOutput(expectedOutput());
     } else {
       // Build the desugared library in class file format.
-      Path desugaredLib =
-          getDesugaredLibraryInCF(parameters, this::configurationForLibraryCompilation);
+      Path desugaredLib = getDesugaredLibraryInCF(parameters, opt -> {});
 
       // Run on the JVM with desugared library on classpath.
       testForJvm()
@@ -143,19 +107,12 @@
     KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
     testForD8()
         .addLibraryFiles(getLibraryFile())
-        .addOptionsModification(this::configurationForProgramCompilation)
         .addInnerClasses(BufferedReaderTest.class)
         .setMinApi(parameters.getApiLevel())
         .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
         .compile()
         .addDesugaredCoreLibraryRunClassPath(
-            (apiLevel, keepRules, shrink) ->
-                buildDesugaredLibrary(
-                    apiLevel,
-                    keepRules,
-                    shrink,
-                    ImmutableList.of(),
-                    this::configurationForLibraryCompilation),
+            this::buildDesugaredLibrary,
             parameters.getApiLevel(),
             keepRuleConsumer.get(),
             shrinkDesugaredLibrary)
@@ -172,7 +129,6 @@
     KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
     testForR8(parameters.getBackend())
         .addLibraryFiles(getLibraryFile())
-        .addOptionsModification(this::configurationForProgramCompilation)
         .addInnerClasses(BufferedReaderTest.class)
         .addKeepMainRule(TestClass.class)
         .setMinApi(parameters.getApiLevel())
@@ -180,13 +136,7 @@
         .enableInliningAnnotations()
         .compile()
         .addDesugaredCoreLibraryRunClassPath(
-            (apiLevel, keepRules, shrink) ->
-                buildDesugaredLibrary(
-                    apiLevel,
-                    keepRules,
-                    shrink,
-                    ImmutableList.of(),
-                    this::configurationForLibraryCompilation),
+            this::buildDesugaredLibrary,
             parameters.getApiLevel(),
             keepRuleConsumer.get(),
             shrinkDesugaredLibrary)