diff options
author | Søren Gjesse <sgjesse@google.com> | 2021-03-11 16:04:42 +0100 |
---|---|---|
committer | Søren Gjesse <sgjesse@google.com> | 2021-03-15 08:53:09 +0000 |
commit | ef19577b3de8f23b7b4bc711b3a109b383795493 (patch) | |
tree | 143f07f5de7ec68cb821956d2dbbd7e2528e4658 | |
parent | 0c4c1ea5bfa64f59d7747e7172ec34893c0f398a (diff) | |
download | r8-ef19577b3de8f23b7b4bc711b3a109b383795493.tar.gz |
Add support for building with the JDK11 based desugared library
With the new option to test.py one can run
tools/test.py --desugared-library-configuration=jdk11 --desugared-library=HEAD ...
to use the JDK11 based desugared library.
The configuration diff for desugar_jdk_libs.json is:
diff -u2 desugar_jdk_libs.json jdk11/desugar_jdk_libs.json
--- desugar_jdk_libs.json 2021-03-11 14:56:35.790624175 +0100
+++ jdk11/desugar_jdk_libs.json 2021-03-11 15:03:35.983412505 +0100
@@ -76,5 +76,7 @@
"j$.time.": "java.time.",
"java.time.": "j$.time.",
- "java.util.Desugar": "j$.util.Desugar"
+ "java.util.Desugar": "j$.util.Desugar",
+ "sun.misc.Desugar": "j$.sun.misc.Desugar",
+ "jdk.internal.util.Preconditions": "j$.jdk.internal.util.Preconditions"
},
"retarget_lib_member": {
@@ -112,8 +114,12 @@
"java.util.StringJoiner": "j$.util.StringJoiner",
"java.util.Tripwire": "j$.util.Tripwire",
- "java.util.concurrent.DesugarUnsafe": "j$.util.concurrent.DesugarUnsafe",
+ "java.util.concurrent.Helpers": "j$.util.concurrent.Helpers",
"java.util.concurrent.ThreadLocalRandom": "j$.util.concurrent.ThreadLocalRandom",
"java.util.concurrent.atomic.DesugarAtomic": "j$.util.concurrent.atomic.DesugarAtomic",
- "java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap"
+ "java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap",
+ "java.util.AbstractList": "j$.util.AbstractList",
+ "java.util.CollSer": "j$.util.CollSer",
+ "java.util.ImmutableCollections": "j$.util.ImmutableCollections",
+ "java.util.KeyValueHolder": "j$.util.KeyValueHolder"
},
"retarget_lib_member": {
And for desugar_jdk_libs_alternative_3.json:
diff -u2 desugar_jdk_libs_alternative_3.json jdk11/desugar_jdk_libs_alternative_3.json
--- desugar_jdk_libs_alternative_3.json 2021-03-11 15:01:37.471906496 +0100
+++ jdk11/desugar_jdk_libs_alternative_3.json 2021-03-11 15:00:34.517792562 +0100
@@ -76,5 +76,7 @@
"j$.time.": "java.time.",
"java.time.": "j$.time.",
- "java.util.Desugar": "j$.util.Desugar"
+ "java.util.Desugar": "j$.util.Desugar",
+ "sun.misc.Desugar": "j$.sun.misc.Desugar",
+ "jdk.internal.util.Preconditions": "j$.jdk.internal.util.Preconditions"
},
"retarget_lib_member": {
@@ -112,8 +114,13 @@
"java.util.StringJoiner": "j$.util.StringJoiner",
"java.util.Tripwire": "j$.util.Tripwire",
- "java.util.concurrent.DesugarUnsafe": "j$.util.concurrent.DesugarUnsafe",
+ "java.util.concurrent.Helpers": "j$.util.concurrent.Helpers",
"java.util.concurrent.ThreadLocalRandom": "j$.util.concurrent.ThreadLocalRandom",
"java.util.concurrent.atomic.DesugarAtomic": "j$.util.concurrent.atomic.DesugarAtomic",
"java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap",
+ "java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap",
+ "java.util.AbstractList": "j$.util.AbstractList",
+ "java.util.CollSer": "j$.util.CollSer",
+ "java.util.ImmutableCollections": "j$.util.ImmutableCollections",
+ "java.util.KeyValueHolder": "j$.util.KeyValueHolder",
"java.io.DesugarBufferedReader": "j$.io.DesugarBufferedReader",
"java.io.UncheckedIOException": "j$.io.UncheckedIOException"
Bug: 182463100
Change-Id: I31b4bb20b7ee80e351f996b0d1e9280285a1d0ff
-rw-r--r-- | build.gradle | 4 | ||||
-rw-r--r-- | src/library_desugar/desugar_jdk_libs_alternative_3.json | 6 | ||||
-rw-r--r-- | src/library_desugar/jdk11/desugar_jdk_libs.json | 257 | ||||
-rw-r--r-- | src/library_desugar/jdk11/desugar_jdk_libs_alternative_3.json | 260 | ||||
-rw-r--r-- | src/test/java/com/android/tools/r8/ToolHelper.java | 6 | ||||
-rwxr-xr-x | tools/archive_desugar_jdk_libs.py | 24 | ||||
-rwxr-xr-x | tools/test.py | 15 | ||||
-rw-r--r-- | tools/utils.py | 1 |
8 files changed, 556 insertions, 17 deletions
diff --git a/build.gradle b/build.gradle index 433b39a13..323256bb9 100644 --- a/build.gradle +++ b/build.gradle @@ -1939,6 +1939,10 @@ test { systemProperty 'slow_tests', project.property('slow_tests') } + + if (project.hasProperty('desugar_jdk_json_dir')) { + systemProperty 'desugar_jdk_json_dir', project.property('desugar_jdk_json_dir') + } if (project.hasProperty('desugar_jdk_libs')) { systemProperty 'desugar_jdk_libs', project.property('desugar_jdk_libs') } diff --git a/src/library_desugar/desugar_jdk_libs_alternative_3.json b/src/library_desugar/desugar_jdk_libs_alternative_3.json index e23a9b8fe..2b0ffd99d 100644 --- a/src/library_desugar/desugar_jdk_libs_alternative_3.json +++ b/src/library_desugar/desugar_jdk_libs_alternative_3.json @@ -77,12 +77,6 @@ "java.time.": "j$.time.", "java.util.Desugar": "j$.util.Desugar" }, - "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" - }, "retarget_lib_member": { "java.util.Date#toInstant": "java.util.DesugarDate", "java.util.GregorianCalendar#toZonedDateTime": "java.util.DesugarGregorianCalendar", diff --git a/src/library_desugar/jdk11/desugar_jdk_libs.json b/src/library_desugar/jdk11/desugar_jdk_libs.json new file mode 100644 index 000000000..b0c751c28 --- /dev/null +++ b/src/library_desugar/jdk11/desugar_jdk_libs.json @@ -0,0 +1,257 @@ +{ + "configuration_format_version": 3, + "group_id" : "com.tools.android", + "artifact_id" : "desugar_jdk_libs", + "version": "2.0.0", + "required_compilation_api_level": 26, + "synthesized_library_classes_package_prefix": "j$.", + "support_all_callbacks_from_library": true, + "common_flags": [ + { + "api_level_below_or_equal": 25, + "wrapper_conversion": [ + "java.time.Clock" + ] + }, + { + "api_level_below_or_equal": 23, + "wrapper_conversion": [ + "java.util.PrimitiveIterator$OfDouble", + "java.util.PrimitiveIterator$OfInt", + "java.util.PrimitiveIterator$OfLong", + "java.util.Spliterator", + "java.util.Spliterator$OfDouble", + "java.util.Spliterator$OfInt", + "java.util.Spliterator$OfLong", + "java.util.Spliterator$OfPrimitive", + "java.util.function.BiConsumer", + "java.util.function.BiFunction", + "java.util.function.BiPredicate", + "java.util.function.BinaryOperator", + "java.util.function.Consumer", + "java.util.function.DoubleBinaryOperator", + "java.util.function.DoubleConsumer", + "java.util.function.DoubleFunction", + "java.util.function.DoublePredicate", + "java.util.function.DoubleToIntFunction", + "java.util.function.DoubleToLongFunction", + "java.util.function.DoubleUnaryOperator", + "java.util.function.Function", + "java.util.function.IntBinaryOperator", + "java.util.function.IntConsumer", + "java.util.function.IntFunction", + "java.util.function.IntPredicate", + "java.util.function.IntToDoubleFunction", + "java.util.function.IntToLongFunction", + "java.util.function.IntUnaryOperator", + "java.util.function.LongBinaryOperator", + "java.util.function.LongConsumer", + "java.util.function.LongFunction", + "java.util.function.LongPredicate", + "java.util.function.LongToDoubleFunction", + "java.util.function.LongToIntFunction", + "java.util.function.LongUnaryOperator", + "java.util.function.ObjDoubleConsumer", + "java.util.function.ObjIntConsumer", + "java.util.function.ObjLongConsumer", + "java.util.function.Predicate", + "java.util.function.Supplier", + "java.util.function.ToDoubleFunction", + "java.util.function.ToIntFunction", + "java.util.function.ToLongFunction", + "java.util.function.UnaryOperator", + "java.util.stream.BaseStream", + "java.util.stream.Collector", + "java.util.stream.DoubleStream", + "java.util.stream.IntStream", + "java.util.stream.LongStream", + "java.util.stream.Stream" + ] + } + ], + "library_flags": [ + { + "api_level_below_or_equal": 25, + "rewrite_prefix": { + "j$.time.": "java.time.", + "java.time.": "j$.time.", + "java.util.Desugar": "j$.util.Desugar", + "sun.misc.Desugar": "j$.sun.misc.Desugar", + "jdk.internal.util.Preconditions": "j$.jdk.internal.util.Preconditions" + }, + "retarget_lib_member": { + "java.util.Date#toInstant": "java.util.DesugarDate", + "java.util.GregorianCalendar#toZonedDateTime": "java.util.DesugarGregorianCalendar", + "java.util.TimeZone#toZoneId": "java.util.DesugarTimeZone" + }, + "custom_conversion": { + "java.time.ZonedDateTime": "java.time.TimeConversions", + "java.time.LocalDate": "java.time.TimeConversions", + "java.time.Duration": "java.time.TimeConversions", + "java.time.ZoneId": "java.time.TimeConversions", + "java.time.MonthDay": "java.time.TimeConversions", + "java.time.Instant": "java.time.TimeConversions" + } + }, + { + "api_level_below_or_equal": 23, + "rewrite_prefix": { + "j$.util.Optional": "java.util.Optional", + "j$.util.LongSummaryStatistics": "java.util.LongSummaryStatistics", + "j$.util.IntSummaryStatistics": "java.util.IntSummaryStatistics", + "j$.util.DoubleSummaryStatistics": "java.util.DoubleSummaryStatistics", + "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.Helpers": "j$.util.concurrent.Helpers", + "java.util.concurrent.ThreadLocalRandom": "j$.util.concurrent.ThreadLocalRandom", + "java.util.concurrent.atomic.DesugarAtomic": "j$.util.concurrent.atomic.DesugarAtomic", + "java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap", + "java.util.AbstractList": "j$.util.AbstractList", + "java.util.CollSer": "j$.util.CollSer", + "java.util.ImmutableCollections": "j$.util.ImmutableCollections", + "java.util.KeyValueHolder": "j$.util.KeyValueHolder" + }, + "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.lang.Iterable": "j$.lang.Iterable", + "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" + }, + "custom_conversion": { + "java.util.Optional": "java.util.OptionalConversions", + "java.util.OptionalDouble": "java.util.OptionalConversions", + "java.util.OptionalInt": "java.util.OptionalConversions", + "java.util.OptionalLong": "java.util.OptionalConversions", + "java.util.LongSummaryStatistics": "java.util.LongSummaryStatisticsConversions", + "java.util.IntSummaryStatistics": "java.util.IntSummaryStatisticsConversions", + "java.util.DoubleSummaryStatistics": "java.util.DoubleSummaryStatisticsConversions" + } + } + ], + "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", + "java.util.TimeZone#getTimeZone": "java.util.DesugarTimeZone", + "java.util.TimeZone#toZoneId": "java.util.DesugarTimeZone" + }, + "custom_conversion": { + "java.time.ZonedDateTime": "java.time.TimeConversions", + "java.time.LocalDate": "java.time.TimeConversions", + "java.time.Duration": "java.time.TimeConversions", + "java.time.ZoneId": "java.time.TimeConversions", + "java.time.MonthDay": "java.time.TimeConversions", + "java.time.Instant": "java.time.TimeConversions" + } + }, + { + "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", + "java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap" + }, + "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", + "java.util.Collections#synchronizedMap": "java.util.DesugarCollections", + "java.util.Collections#synchronizedSortedMap": "java.util.DesugarCollections" + }, + "dont_rewrite": [ + "java.util.Iterator#remove" + ], + "emulate_interface": { + "java.lang.Iterable": "j$.lang.Iterable", + "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" + }, + "custom_conversion": { + "java.util.Optional": "java.util.OptionalConversions", + "java.util.OptionalDouble": "java.util.OptionalConversions", + "java.util.OptionalInt": "java.util.OptionalConversions", + "java.util.OptionalLong": "java.util.OptionalConversions", + "java.util.LongSummaryStatistics": "java.util.LongSummaryStatisticsConversions", + "java.util.IntSummaryStatistics": "java.util.IntSummaryStatisticsConversions", + "java.util.DoubleSummaryStatistics": "java.util.DoubleSummaryStatisticsConversions" + } + } + ], + "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" + ] +} diff --git a/src/library_desugar/jdk11/desugar_jdk_libs_alternative_3.json b/src/library_desugar/jdk11/desugar_jdk_libs_alternative_3.json new file mode 100644 index 000000000..66f350004 --- /dev/null +++ b/src/library_desugar/jdk11/desugar_jdk_libs_alternative_3.json @@ -0,0 +1,260 @@ +{ + "configuration_format_version": 3, + "group_id" : "com.tools.android", + "artifact_id" : "desugar_jdk_libs_alternative_3", + "version": "2.0.0", + "required_compilation_api_level": 26, + "synthesized_library_classes_package_prefix": "j$.", + "support_all_callbacks_from_library": false, + "common_flags": [ + { + "api_level_below_or_equal": 25, + "wrapper_conversion": [ + "java.time.Clock" + ] + }, + { + "api_level_below_or_equal": 23, + "wrapper_conversion": [ + "java.util.PrimitiveIterator$OfDouble", + "java.util.PrimitiveIterator$OfInt", + "java.util.PrimitiveIterator$OfLong", + "java.util.Spliterator", + "java.util.Spliterator$OfDouble", + "java.util.Spliterator$OfInt", + "java.util.Spliterator$OfLong", + "java.util.Spliterator$OfPrimitive", + "java.util.function.BiConsumer", + "java.util.function.BiFunction", + "java.util.function.BiPredicate", + "java.util.function.BinaryOperator", + "java.util.function.Consumer", + "java.util.function.DoubleBinaryOperator", + "java.util.function.DoubleConsumer", + "java.util.function.DoubleFunction", + "java.util.function.DoublePredicate", + "java.util.function.DoubleToIntFunction", + "java.util.function.DoubleToLongFunction", + "java.util.function.DoubleUnaryOperator", + "java.util.function.Function", + "java.util.function.IntBinaryOperator", + "java.util.function.IntConsumer", + "java.util.function.IntFunction", + "java.util.function.IntPredicate", + "java.util.function.IntToDoubleFunction", + "java.util.function.IntToLongFunction", + "java.util.function.IntUnaryOperator", + "java.util.function.LongBinaryOperator", + "java.util.function.LongConsumer", + "java.util.function.LongFunction", + "java.util.function.LongPredicate", + "java.util.function.LongToDoubleFunction", + "java.util.function.LongToIntFunction", + "java.util.function.LongUnaryOperator", + "java.util.function.ObjDoubleConsumer", + "java.util.function.ObjIntConsumer", + "java.util.function.ObjLongConsumer", + "java.util.function.Predicate", + "java.util.function.Supplier", + "java.util.function.ToDoubleFunction", + "java.util.function.ToIntFunction", + "java.util.function.ToLongFunction", + "java.util.function.UnaryOperator", + "java.util.stream.BaseStream", + "java.util.stream.Collector", + "java.util.stream.DoubleStream", + "java.util.stream.IntStream", + "java.util.stream.LongStream", + "java.util.stream.Stream" + ] + } + ], + "library_flags": [ + { + "api_level_below_or_equal": 25, + "rewrite_prefix": { + "j$.time.": "java.time.", + "java.time.": "j$.time.", + "java.util.Desugar": "j$.util.Desugar", + "sun.misc.Desugar": "j$.sun.misc.Desugar", + "jdk.internal.util.Preconditions": "j$.jdk.internal.util.Preconditions" + }, + "retarget_lib_member": { + "java.util.Date#toInstant": "java.util.DesugarDate", + "java.util.GregorianCalendar#toZonedDateTime": "java.util.DesugarGregorianCalendar", + "java.util.TimeZone#toZoneId": "java.util.DesugarTimeZone" + }, + "custom_conversion": { + "java.time.ZonedDateTime": "java.time.TimeConversions", + "java.time.LocalDate": "java.time.TimeConversions", + "java.time.Duration": "java.time.TimeConversions", + "java.time.ZoneId": "java.time.TimeConversions", + "java.time.MonthDay": "java.time.TimeConversions", + "java.time.Instant": "java.time.TimeConversions" + } + }, + { + "api_level_below_or_equal": 23, + "rewrite_prefix": { + "j$.util.Optional": "java.util.Optional", + "j$.util.LongSummaryStatistics": "java.util.LongSummaryStatistics", + "j$.util.IntSummaryStatistics": "java.util.IntSummaryStatistics", + "j$.util.DoubleSummaryStatistics": "java.util.DoubleSummaryStatistics", + "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.Helpers": "j$.util.concurrent.Helpers", + "java.util.concurrent.ThreadLocalRandom": "j$.util.concurrent.ThreadLocalRandom", + "java.util.concurrent.atomic.DesugarAtomic": "j$.util.concurrent.atomic.DesugarAtomic", + "java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap", + "java.util.AbstractList": "j$.util.AbstractList", + "java.util.CollSer": "j$.util.CollSer", + "java.util.ImmutableCollections": "j$.util.ImmutableCollections", + "java.util.KeyValueHolder": "j$.util.KeyValueHolder", + "java.io.DesugarBufferedReader": "j$.io.DesugarBufferedReader", + "java.io.UncheckedIOException": "j$.io.UncheckedIOException" + }, + "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.io.BufferedReader#lines": "java.io.DesugarBufferedReader" + }, + "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" + }, + "custom_conversion": { + "java.util.Optional": "java.util.OptionalConversions", + "java.util.OptionalDouble": "java.util.OptionalConversions", + "java.util.OptionalInt": "java.util.OptionalConversions", + "java.util.OptionalLong": "java.util.OptionalConversions", + "java.util.LongSummaryStatistics": "java.util.LongSummaryStatisticsConversions", + "java.util.IntSummaryStatistics": "java.util.IntSummaryStatisticsConversions", + "java.util.DoubleSummaryStatistics": "java.util.DoubleSummaryStatisticsConversions" + } + } + ], + "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", + "java.util.TimeZone#getTimeZone": "java.util.DesugarTimeZone", + "java.util.TimeZone#toZoneId": "java.util.DesugarTimeZone" + }, + "custom_conversion": { + "java.time.ZonedDateTime": "java.time.TimeConversions", + "java.time.LocalDate": "java.time.TimeConversions", + "java.time.Duration": "java.time.TimeConversions", + "java.time.ZoneId": "java.time.TimeConversions", + "java.time.MonthDay": "java.time.TimeConversions", + "java.time.Instant": "java.time.TimeConversions" + } + }, + { + "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.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.ThreadLocalRandom": "j$.util.concurrent.ThreadLocalRandom", + "java.util.concurrent.atomic.DesugarAtomic": "j$.util.concurrent.atomic.DesugarAtomic", + "java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap", + "java.io.UncheckedIOException": "j$.io.UncheckedIOException" + }, + "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", + "java.util.Collections#synchronizedMap": "java.util.DesugarCollections", + "java.util.Collections#synchronizedSortedMap": "java.util.DesugarCollections", + "java.io.BufferedReader#lines": "java.io.DesugarBufferedReader" + }, + "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" + }, + "custom_conversion": { + "java.util.Optional": "java.util.OptionalConversions", + "java.util.OptionalDouble": "java.util.OptionalConversions", + "java.util.OptionalInt": "java.util.OptionalConversions", + "java.util.OptionalLong": "java.util.OptionalConversions", + "java.util.LongSummaryStatistics": "java.util.LongSummaryStatisticsConversions", + "java.util.IntSummaryStatistics": "java.util.IntSummaryStatisticsConversions", + "java.util.DoubleSummaryStatistics": "java.util.DoubleSummaryStatisticsConversions" + } + } + ], + "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$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" + ] +} diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java index 544938a7a..9d0e9b5e6 100644 --- a/src/test/java/com/android/tools/r8/ToolHelper.java +++ b/src/test/java/com/android/tools/r8/ToolHelper.java @@ -180,10 +180,12 @@ public class ToolHelper { public static final Path DESUGAR_LIB_CONVERSIONS = Paths.get(LIBS_DIR, "library_desugar_conversions.zip"); + public static final String DESUGAR_LIB_JSON_DIR = + System.getProperty("desugar_jdk_json_dir", "src/library_desugar"); public static final Path DESUGAR_LIB_JSON_FOR_TESTING = - Paths.get("src/library_desugar/desugar_jdk_libs.json"); + Paths.get(DESUGAR_LIB_JSON_DIR, "desugar_jdk_libs.json"); public static final Path DESUGAR_LIB_JSON_FOR_TESTING_ALTERNATIVE_3 = - Paths.get("src/library_desugar/desugar_jdk_libs_alternative_3.json"); + Paths.get(DESUGAR_LIB_JSON_DIR, "desugar_jdk_libs_alternative_3.json"); public static boolean isLocalDevelopment() { return System.getProperty("local_development", "0").equals("1"); diff --git a/tools/archive_desugar_jdk_libs.py b/tools/archive_desugar_jdk_libs.py index 403212f09..825cb91a9 100755 --- a/tools/archive_desugar_jdk_libs.py +++ b/tools/archive_desugar_jdk_libs.py @@ -85,10 +85,12 @@ def CloneDesugaredLibrary(github_account, checkout_dir): 'https://github.com/' + github_account + '/' + LIBRARY_NAME, checkout_dir) -def BuildDesugaredLibrary(checkout_dir): +def BuildDesugaredLibrary(checkout_dir, variant): + if (variant != 'jdk8' and variant != 'jdk11'): + raise Exception('Variant ' + variant + 'is not supported') with utils.ChangedWorkingDirectory(checkout_dir): bazel = os.path.join(utils.BAZEL_TOOL, 'lib', 'bazel', 'bin', 'bazel') - cmd = [bazel, 'build', 'maven_release'] + cmd = [bazel, 'build', 'maven_release' + ('_jdk11' if variant == 'jdk11' else '')] utils.PrintCmd(cmd) subprocess.check_call(cmd) cmd = [bazel, 'shutdown'] @@ -97,9 +99,16 @@ def BuildDesugaredLibrary(checkout_dir): # Locate the library jar and the maven zip with the jar from the # bazel build. - library_jar = os.path.join( - checkout_dir, 'bazel-bin', 'src', 'share', 'classes', 'java', 'libjava.jar') - maven_zip = os.path.join(checkout_dir, 'bazel-bin', LIBRARY_NAME +'.zip') + if variant == 'jdk8': + library_jar = os.path.join( + checkout_dir, 'bazel-bin', 'src', 'share', 'classes', 'java', 'libjava.jar') + else: + library_jar = os.path.join( + checkout_dir, 'bazel-bin', 'jdk11', 'src', 'java_base_selected.jar') + maven_zip = os.path.join( + checkout_dir, + 'bazel-bin', + LIBRARY_NAME + ('_jdk11' if variant != 'jdk11' else '') +'.zip') return (library_jar, maven_zip) @@ -124,11 +133,12 @@ def Main(argv): # Make sure bazel is extracted in third_party. utils.DownloadFromGoogleCloudStorage(utils.BAZEL_SHA_FILE) utils.DownloadFromGoogleCloudStorage(utils.JAVA8_SHA_FILE) + utils.DownloadFromGoogleCloudStorage(utils.JAVA11_SHA_FILE) if options.build_only: with utils.TempDir() as checkout_dir: CloneDesugaredLibrary(options.github_account, checkout_dir) - (library_jar, maven_zip) = BuildDesugaredLibrary(checkout_dir) + (library_jar, maven_zip) = BuildDesugaredLibrary(checkout_dir, "jdk8") shutil.copyfile( library_jar, os.path.join(options.build_only, os.path.basename(library_jar))) @@ -150,7 +160,7 @@ def Main(argv): raise Exception( 'Target archive directory %s already exists' % destination) - (library_jar, maven_zip) = BuildDesugaredLibrary(checkout_dir) + (library_jar, maven_zip) = BuildDesugaredLibrary(checkout_dir, "jdk8") storage_path = LIBRARY_NAME + '/' + version # Upload the jar file with the library. diff --git a/tools/test.py b/tools/test.py index 9e2a3e2a9..f7b204f24 100755 --- a/tools/test.py +++ b/tools/test.py @@ -162,6 +162,8 @@ def ParseOptions(): help='Enable Java debug agent and suspend compilation (default disabled)', default=False, action='store_true') + result.add_option('--desugared-library-configuration', '--desugared_library-configuration', + help='Use alternative desugared library configuration.') result.add_option('--desugared-library', '--desugared_library', help='Build and use desugared library from GitHub.') return result.parse_args() @@ -181,6 +183,13 @@ def Main(): if utils.is_bot(): gradle.RunGradle(['--no-daemon', 'clean']) + desugar_jdk_json_dir = None + if options.desugared_library_configuration: + if options.desugared_library_configuration != 'jdk11': + print("Only value supported for --desugared-library is 'jdk11'") + exit(1) + desugar_jdk_json_dir = 'src/library_desugar/jdk11' + desugar_jdk_libs = None if options.desugared_library: if options.desugared_library != 'HEAD': @@ -195,12 +204,12 @@ def Main(): # Make sure bazel is extracted in third_party. utils.DownloadFromGoogleCloudStorage(utils.BAZEL_SHA_FILE) utils.DownloadFromGoogleCloudStorage(utils.JAVA8_SHA_FILE) - (library_jar, maven_zip) = archive_desugar_jdk_libs.BuildDesugaredLibrary(checkout_dir) + utils.DownloadFromGoogleCloudStorage(utils.JAVA11_SHA_FILE) + (library_jar, maven_zip) = archive_desugar_jdk_libs.BuildDesugaredLibrary(checkout_dir, 'jdk11' if options.desugared_library_configuration == 'jdk11' else 'jdk8') desugar_jdk_libs = os.path.join(desugar_jdk_libs_dir, os.path.basename(library_jar)) shutil.copyfile(library_jar, desugar_jdk_libs) print('Desugared library for test in ' + desugar_jdk_libs) - gradle_args = ['--stacktrace'] if utils.is_bot(): # Bots don't like dangling processes. @@ -284,6 +293,8 @@ def Main(): gradle_args.append('--no-daemon') if options.debug_agent: gradle_args.append('--no-daemon') + if desugar_jdk_json_dir: + gradle_args.append('-Pdesugar_jdk_json_dir=' + desugar_jdk_json_dir) if desugar_jdk_libs: gradle_args.append('-Pdesugar_jdk_libs=' + desugar_jdk_libs) diff --git a/tools/utils.py b/tools/utils.py index 182099151..da4a0e4fa 100644 --- a/tools/utils.py +++ b/tools/utils.py @@ -83,6 +83,7 @@ INTERNAL_DUMPS_DIR = os.path.join(THIRD_PARTY, 'internal-apps') BAZEL_SHA_FILE = os.path.join(THIRD_PARTY, 'bazel.tar.gz.sha1') BAZEL_TOOL = os.path.join(THIRD_PARTY, 'bazel') JAVA8_SHA_FILE = os.path.join(THIRD_PARTY, 'openjdk', 'jdk8', 'linux-x86.tar.gz.sha1') +JAVA11_SHA_FILE = os.path.join(THIRD_PARTY, 'openjdk', 'jdk-11', 'linux.tar.gz.sha1') IGNORE_WARNINGS_RULES = os.path.join(REPO_ROOT, 'src', 'test', 'ignorewarnings.rules') ANDROID_HOME_ENVIROMENT_NAME = "ANDROID_HOME" |