Core lib descriptor, RC 2
Change-Id: I799286bfc59ec9a5d9321f2f61ff1b3306754818
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/desugar_jdk_libs.json b/src/test/java/com/android/tools/r8/desugar/corelib/desugar_jdk_libs.json
new file mode 100644
index 0000000..f43b696
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/desugar_jdk_libs.json
@@ -0,0 +1,141 @@
+{
+ "version": 1,
+ "required_compilation_api_level": 26,
+ "library_flags": [
+ {
+ "api_level_below_or_equal": 25,
+ "rewrite_prefix": {
+ "java.time.": "j$.time.",
+ "java.util.Desugar": "j$.util.Desugar"
+ },
+ "retarget_lib_member": {
+ "java.util.Calendar#toInstant": "java.util.DesugarCalendar",
+ "java.util.Date#from": "java.util.DesugarDate",
+ "java.util.Date#toInstant": "java.util.DesugarDate",
+ "java.util.GregorianCalendar#from": "java.util.DesugarGregorianCalendar",
+ "java.util.GregorianCalendar#toZonedDateTime": "java.util.DesugarGregorianCalendar"
+ },
+ "backport": {
+ "java.lang.Double8": "java.lang.Double",
+ "java.lang.Integer8": "java.lang.Integer",
+ "java.lang.Long8": "java.lang.Long",
+ "java.lang.Math8": "java.lang.Math"
+ }
+ },
+ {
+ "api_level_below_or_equal": 23,
+ "rewrite_prefix": {
+ "java.util.stream.": "j$.util.stream.",
+ "java.util.function.": "j$.util.function.",
+ "java.util.Comparators": "j$.util.Comparators",
+ "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.SortedSet$1": "j$.util.SortedSet$1",
+ "java.util.Spliterator": "j$.util.Spliterator",
+ "java.util.StringJoiner": "j$.util.StringJoiner",
+ "java.util.Tripwire": "j$.util.Tripwire",
+ "java.util.concurrent.DesugarUnsafe": "j$.util.concurrent.DesugarUnsafe",
+ "java.util.concurrent.ThreadLocalRandom": "j$.util.concurrent.ThreadLocalRandom",
+ "java.util.concurrent.atomic.DesugarAtomic": "j$.util.concurrent.atomic.DesugarAtomic"
+ },
+ "retarget_lib_member": {
+ "java.util.Arrays#stream": "java.util.DesugarArrays",
+ "java.util.Arrays#spliterator": "java.util.DesugarArrays",
+ "java.util.LinkedHashSet#spliterator": "java.util.DesugarLinkedHashSet"
+ },
+ "dont_rewrite": [
+ "java.util.Iterator#remove"
+ ],
+ "emulate_interface": {
+ "java.util.Map$Entry": "j$.util.Map$Entry",
+ "java.util.Collection": "j$.util.Collection",
+ "java.util.Map": "j$.util.Map",
+ "java.util.Iterator": "j$.util.Iterator",
+ "java.util.Comparator": "j$.util.Comparator",
+ "java.util.List": "j$.util.List",
+ "java.util.SortedSet": "j$.util.SortedSet",
+ "java.util.Set": "j$.util.Set",
+ "java.util.concurrent.ConcurrentMap": "j$.util.concurrent.ConcurrentMap"
+ }
+ },
+ {
+ "api_level_below_or_equal": 22,
+ "rewrite_prefix": {
+ "java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap"
+ }
+ }
+ ],
+ "program_flags": [
+ {
+ "api_level_below_or_equal": 25,
+ "rewrite_prefix": {
+ "java.time.": "j$.time.",
+ "java.util.Desugar": "j$.util.Desugar"
+ },
+ "retarget_lib_member": {
+ "java.util.Calendar#toInstant": "java.util.DesugarCalendar",
+ "java.util.Date#from": "java.util.DesugarDate",
+ "java.util.Date#toInstant": "java.util.DesugarDate",
+ "java.util.GregorianCalendar#from": "java.util.DesugarGregorianCalendar",
+ "java.util.GregorianCalendar#toZonedDateTime": "java.util.DesugarGregorianCalendar"
+ }
+ },
+ {
+ "api_level_below_or_equal": 23,
+ "rewrite_prefix": {
+ "java.util.stream.": "j$.util.stream.",
+ "java.util.function.": "j$.util.function.",
+ "java.util.DoubleSummaryStatistics": "j$.util.DoubleSummaryStatistics",
+ "java.util.IntSummaryStatistics": "j$.util.IntSummaryStatistics",
+ "java.util.LongSummaryStatistics": "j$.util.LongSummaryStatistics",
+ "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.ThreadLocalRandom": "j$.util.concurrent.ThreadLocalRandom",
+ "java.util.concurrent.atomic.DesugarAtomic": "j$.util.concurrent.atomic.DesugarAtomic"
+ },
+ "retarget_lib_member": {
+ "java.util.Arrays#stream": "java.util.DesugarArrays",
+ "java.util.Arrays#spliterator": "java.util.DesugarArrays",
+ "java.util.LinkedHashSet#spliterator": "java.util.DesugarLinkedHashSet",
+ "java.util.concurrent.atomic.AtomicInteger#getAndUpdate": "java.util.concurrent.atomic.DesugarAtomicInteger",
+ "java.util.concurrent.atomic.AtomicInteger#updateAndGet": "java.util.concurrent.atomic.DesugarAtomicInteger",
+ "java.util.concurrent.atomic.AtomicInteger#getAndAccumulate": "java.util.concurrent.atomic.DesugarAtomicInteger",
+ "java.util.concurrent.atomic.AtomicInteger#accumulateAndGet": "java.util.concurrent.atomic.DesugarAtomicInteger",
+ "java.util.concurrent.atomic.AtomicLong#getAndUpdate": "java.util.concurrent.atomic.DesugarAtomicLong",
+ "java.util.concurrent.atomic.AtomicLong#updateAndGet": "java.util.concurrent.atomic.DesugarAtomicLong",
+ "java.util.concurrent.atomic.AtomicLong#getAndAccumulate": "java.util.concurrent.atomic.DesugarAtomicLong",
+ "java.util.concurrent.atomic.AtomicLong#accumulateAndGet": "java.util.concurrent.atomic.DesugarAtomicLong",
+ "java.util.concurrent.atomic.AtomicReference#getAndUpdate": "java.util.concurrent.atomic.DesugarAtomicReference",
+ "java.util.concurrent.atomic.AtomicReference#updateAndGet": "java.util.concurrent.atomic.DesugarAtomicReference",
+ "java.util.concurrent.atomic.AtomicReference#getAndAccumulate": "java.util.concurrent.atomic.DesugarAtomicReference",
+ "java.util.concurrent.atomic.AtomicReference#accumulateAndGet": "java.util.concurrent.atomic.DesugarAtomicReference"
+ },
+ "dont_rewrite": [
+ "java.util.Iterator#remove"
+ ],
+ "emulate_interface": {
+ "java.util.Map$Entry": "j$.util.Map$Entry",
+ "java.util.Collection": "j$.util.Collection",
+ "java.util.Map": "j$.util.Map",
+ "java.util.Iterator": "j$.util.Iterator",
+ "java.util.Comparator": "j$.util.Comparator",
+ "java.util.List": "j$.util.List",
+ "java.util.SortedSet": "j$.util.SortedSet",
+ "java.util.Set": "j$.util.Set",
+ "java.util.concurrent.ConcurrentMap": "j$.util.concurrent.ConcurrentMap"
+ }
+ },
+ {
+ "api_level_below_or_equal": 22,
+ "rewrite_prefix": {
+ "java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap"
+ }
+ }
+ ]
+}
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/desugar_jdk_libs_comments.md b/src/test/java/com/android/tools/r8/desugar/corelib/desugar_jdk_libs_comments.md
new file mode 100644
index 0000000..3e0a514
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/desugar_jdk_libs_comments.md
@@ -0,0 +1,33 @@
+# Description of the core library configuration file
+
+## Version
+
+The first field `version` encodes a versioning number internal to R8/D8 in the
+form of an unsigned integer. It allows R8/D8 to know if the file given is supported.
+Non-backward compatible changes to the desugared library increase the version number, and such
+library cannot be compiled without upgrading R8/D8 to the latest version.
+
+## Required compilation API level
+
+The second field `required_compilation_api_level` encodes the minimal Android API level required for
+the desugared library to be compiled correctly. If the API of library used for compilation of the
+library or a program using the library is lower than this level, one has to upgrade the SDK version
+used to be able to use desugared libraries.
+
+## Library and program flags
+
+The third and last fields are `library_flags` and `program_flags`. They include the set of flags
+required for respectively the library and the program using the desugared library compilation. The
+sets of flags are different depending on the min API level used. The flags are in a list, where
+each list entry specifies up to which min API level the set of flags should be applied. During
+compilation, R8/D8 adds up all the required flags for the min API level specified at compilation.
+
+For example, let's say the `program_flags` have entries for `api_level_below_or_equal` 20, 24 and 26.
+If compiling the program for min API 24, R8/D8 will use both the set of flags for API 24 and 26
+(24 <= 24, 24 <= 26 but !(24 <= 20)).
+
+## Copyright
+
+Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+for details. All rights reserved. Use of this source code is governed by a
+BSD-style license that can be found in the LICENSE file.
\ No newline at end of file