Use Human specification as input for JDK11
Bug: 184026720
Change-Id: I021e773e1e5fef6340e1f44d7ff7e8ab24bac9b9
diff --git a/src/library_desugar/jdk11/chm_only_desugar_jdk_libs.json b/src/library_desugar/jdk11/chm_only_desugar_jdk_libs.json
index f3a4daa..f240706 100644
--- a/src/library_desugar/jdk11/chm_only_desugar_jdk_libs.json
+++ b/src/library_desugar/jdk11/chm_only_desugar_jdk_libs.json
@@ -1,33 +1,28 @@
{
- "configuration_format_version": 3,
- "group_id" : "com.tools.android",
- "artifact_id" : "chm_only_desugar_jdk_libs",
- "version": "1.0.12",
+ "identifier": "com.tools.android:chm_only_desugar_jdk_libs:1.0.12",
+ "configuration_format_version": 100,
"required_compilation_api_level": 30,
"synthesized_library_classes_package_prefix": "j$.",
"support_all_callbacks_from_library": false,
"common_flags": [
+ {
+ "api_level_below_or_equal": 23,
+ "rewrite_prefix": {
+ "java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap",
+ "java.util.concurrent.ThreadLocalRandom": "j$.util.concurrent.ThreadLocalRandom"
+ }
+ }
],
+ "program_flags": [],
"library_flags": [
{
"api_level_below_or_equal": 23,
"rewrite_prefix": {
"java.util.concurrent.Helpers": "j$.util.concurrent.Helpers",
- "java.util.concurrent.ThreadLocalRandom": "j$.util.concurrent.ThreadLocalRandom",
- "java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap",
"sun.misc.Desugar": "j$.sun.misc.Desugar"
}
}
],
- "program_flags": [
- {
- "api_level_below_or_equal": 23,
- "rewrite_prefix": {
- "java.util.concurrent.ThreadLocalRandom": "j$.util.concurrent.ThreadLocalRandom",
- "java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap"
- }
- }
- ],
"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; }",
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs.json b/src/library_desugar/jdk11/desugar_jdk_libs.json
index b075745..778274a 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs.json
@@ -1,216 +1,11 @@
{
- "configuration_format_version": 3,
- "group_id" : "com.tools.android",
- "artifact_id" : "desugar_jdk_libs",
- "version": "2.0.0",
+ "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": 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": 10000,
- "rewrite_prefix": {
- "desugar.": "j$.desugar.",
- "libcore.": "j$.libcore.",
- "java.net.URLDecoder": "j$.net.URLDecoder",
- "java.net.URLEncoder": "j$.net.URLEncoder",
- "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": {
- "j$.time.": "java.time.",
- "java.time.": "j$.time.",
- "java.util.Desugar": "j$.util.Desugar"
- },
- "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": 29,
- "rewrite_prefix": {
- "java.util.concurrent.Flow": "j$.util.concurrent.Flow"
- }
- },
- {
- "api_level_below_or_equal": 25,
- "rewrite_prefix": {
- "java.io.DesugarFile" : "j$.io.DesugarFile",
- "sun.misc.Desugar": "j$.sun.misc.Desugar",
- "jdk.internal.": "j$.jdk.internal.",
- "java.nio.Desugar": "j$.nio.Desugar",
- "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.",
- "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"
- },
- "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"
- },
- "retarget_lib_member": {
- "java.io.File#toPath": "java.io.DesugarFile"
- }
- },
- {
- "api_level_below_or_equal": 23,
- "rewrite_prefix": {
- "java.lang.FunctionalInterface": "j$.lang.FunctionalInterface",
- "java.io.DesugarInputStream": "j$.io.DesugarInputStream",
- "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.nio.channels.SeekableByteChannel": "j$.nio.channels.SeekableByteChannel",
- "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.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"
- }
- },
- {
- "api_level_below_or_equal": 18,
- "rewrite_prefix": {
- "java.nio.charset.StandardCharsets": "j$.nio.charset.StandardCharsets"
- },
- "retarget_lib_member": {
- "java.lang.Character#isBmpCodePoint": "java.lang.DesugarCharacter"
- }
- }
- ],
- "program_flags": [
- {
"api_level_below_or_equal": 10000,
"rewrite_prefix": {
"java.net.URLDecoder": "j$.net.URLDecoder",
@@ -223,29 +18,29 @@
"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"
+ "retarget_method": {
+ "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"
},
"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.Instant": "java.time.TimeConversions",
+ "java.time.LocalDate": "java.time.TimeConversions",
"java.time.MonthDay": "java.time.TimeConversions",
- "java.time.Instant": "java.time.TimeConversions"
+ "java.time.ZoneId": "java.time.TimeConversions",
+ "java.time.ZonedDateTime": "java.time.TimeConversions"
}
},
{
+ "api_level_below_or_equal": 25,
+ "wrapper_conversion": [
+ "java.time.Clock"
+ ]
+ },
+ {
"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",
@@ -253,61 +48,245 @@
"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.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap"
+ "java.util.function.": "j$.util.function.",
+ "java.util.stream.": "j$.util.stream."
},
- "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.Iterator": "j$.util.Iterator",
"java.util.List": "j$.util.List",
- "java.util.SortedSet": "j$.util.SortedSet",
+ "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 java.util.LinkedHashSet#spliterator()": "java.util.DesugarLinkedHashSet",
+ "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"
+ },
+ "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.Spliterator",
+ "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"
+ ],
"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",
- "java.util.LongSummaryStatistics": "java.util.LongSummaryStatisticsConversions",
- "java.util.IntSummaryStatistics": "java.util.IntSummaryStatisticsConversions",
- "java.util.DoubleSummaryStatistics": "java.util.DoubleSummaryStatisticsConversions"
+ "java.util.OptionalLong": "java.util.OptionalConversions"
}
},
{
"api_level_below_or_equal": 18,
"rewrite_prefix": {
"java.nio.charset.StandardCharsets": "j$.nio.charset.StandardCharsets"
+ }
+ }
+ ],
+ "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",
+ "java.util.TimeZone java.util.TimeZone#getTimeZone(java.time.ZoneId)": "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": 18,
+ "retarget_method": {
+ "boolean java.lang.Character#isBmpCodePoint(int)": "j$.lang.DesugarCharacter"
+ }
+ }
+ ],
+ "library_flags": [
+ {
+ "api_level_below_or_equal": 10000,
+ "rewrite_prefix": {
+ "desugar.": "j$.desugar.",
+ "java.lang.Desugar": "j$.lang.Desugar",
+ "java.lang.ref.Cleaner": "j$.lang.ref.Cleaner",
+ "libcore.": "j$.libcore.",
+ "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": 29,
+ "rewrite_prefix": {
+ "java.util.concurrent.Flow": "j$.util.concurrent.Flow"
+ }
+ },
+ {
+ "api_level_below_or_equal": 25,
+ "rewrite_prefix": {
+ "java.io.DesugarFile": "j$.io.DesugarFile",
+ "java.nio.Desugar": "j$.nio.Desugar",
+ "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"
},
- "retarget_lib_member": {
- "java.lang.Character#isBmpCodePoint": "j$.lang.DesugarCharacter"
+ "retarget_method": {
+ "boolean java.util.Arrays#deepEquals0(java.lang.Object, java.lang.Object)": "java.util.DesugarArrays",
+ "java.nio.file.Path java.io.File#toPath()": "java.io.DesugarFile",
+ "java.util.TimeZone java.util.TimeZone#getTimeZone(java.time.ZoneId)": "java.util.DesugarTimeZone"
+ },
+ "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.io.DesugarInputStream": "j$.io.DesugarInputStream",
+ "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"
+ }
+ }
+ },
+ {
+ "api_level_below_or_equal": 18,
+ "retarget_method": {
+ "boolean java.lang.Character#isBmpCodePoint(int)": "java.lang.DesugarCharacter"
}
}
],
@@ -326,4 +305,4 @@
"-keepattributes InnerClasses",
"-dontwarn sun.misc.Unsafe"
]
-}
+}
\ 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_alternative_3.json
index 1482909..890f449 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs_alternative_3.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs_alternative_3.json
@@ -1,220 +1,11 @@
{
- "configuration_format_version": 3,
- "group_id" : "com.tools.android",
- "artifact_id" : "desugar_jdk_libs_alternative_3",
- "version": "2.0.0",
+ "identifier": "com.tools.android:desugar_jdk_libs_alternative_3:2.0.0",
+ "configuration_format_version": 100,
"required_compilation_api_level": 30,
"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": 10000,
- "rewrite_prefix": {
- "desugar.": "j$.desugar.",
- "libcore.": "j$.libcore.",
- "java.net.URLDecoder": "j$.net.URLDecoder",
- "java.net.URLEncoder": "j$.net.URLEncoder",
- "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": {
- "j$.time.": "java.time.",
- "java.time.": "j$.time.",
- "java.util.Desugar": "j$.util.Desugar"
- },
- "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": 29,
- "rewrite_prefix": {
- "java.util.concurrent.Flow": "j$.util.concurrent.Flow"
- }
- },
- {
- "api_level_below_or_equal": 30,
- "rewrite_prefix": {
- "java.io.DesugarFile" : "j$.io.DesugarFile",
- "sun.misc.Desugar": "j$.sun.misc.Desugar",
- "jdk.internal.": "j$.jdk.internal.",
- "java.nio.Desugar": "j$.nio.Desugar",
- "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.",
- "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"
- },
- "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"
- },
- "retarget_lib_member": {
- "java.io.File#toPath": "java.io.DesugarFile"
- }
- },
- {
- "api_level_below_or_equal": 23,
- "rewrite_prefix": {
- "java.lang.FunctionalInterface": "j$.lang.FunctionalInterface",
- "java.io.DesugarBufferedReader": "j$.io.DesugarBufferedReader",
- "java.io.DesugarInputStream": "j$.io.DesugarInputStream",
- "java.io.UncheckedIOException": "j$.io.UncheckedIOException",
- "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.nio.channels.SeekableByteChannel": "j$.nio.channels.SeekableByteChannel",
- "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",
- "java.io.BufferedReader#lines": "java.io.DesugarBufferedReader"
- },
- "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"
- }
- },
- {
- "api_level_below_or_equal": 18,
- "rewrite_prefix": {
- "java.nio.charset.StandardCharsets": "j$.nio.charset.StandardCharsets"
- },
- "retarget_lib_member": {
- "java.lang.Character#isBmpCodePoint": "java.lang.DesugarCharacter"
- }
- }
- ],
- "program_flags": [
- {
"api_level_below_or_equal": 10000,
"rewrite_prefix": {
"java.net.URLDecoder": "j$.net.URLDecoder",
@@ -227,29 +18,30 @@
"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"
+ "retarget_method": {
+ "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"
},
"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.Instant": "java.time.TimeConversions",
+ "java.time.LocalDate": "java.time.TimeConversions",
"java.time.MonthDay": "java.time.TimeConversions",
- "java.time.Instant": "java.time.TimeConversions"
+ "java.time.ZoneId": "java.time.TimeConversions",
+ "java.time.ZonedDateTime": "java.time.TimeConversions"
}
},
{
+ "api_level_below_or_equal": 25,
+ "wrapper_conversion": [
+ "java.time.Clock"
+ ]
+ },
+ {
"api_level_below_or_equal": 23,
"rewrite_prefix": {
- "java.util.stream.": "j$.util.stream.",
- "java.util.function.": "j$.util.function.",
+ "java.io.UncheckedIOException": "j$.io.UncheckedIOException",
"java.util.DoubleSummaryStatistics": "j$.util.DoubleSummaryStatistics",
"java.util.IntSummaryStatistics": "j$.util.IntSummaryStatistics",
"java.util.LongSummaryStatistics": "j$.util.LongSummaryStatistics",
@@ -258,63 +50,239 @@
"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.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap",
- "java.io.UncheckedIOException": "j$.io.UncheckedIOException"
+ "java.util.function.": "j$.util.function.",
+ "java.util.stream.": "j$.util.stream."
},
- "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.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.Iterator": "j$.util.Iterator",
"java.util.List": "j$.util.List",
- "java.util.SortedSet": "j$.util.SortedSet",
+ "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 java.util.LinkedHashSet#spliterator()": "java.util.DesugarLinkedHashSet",
+ "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.io.BufferedReader#lines()": "java.io.DesugarBufferedReader",
+ "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"
+ },
+ "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.IntPredicate",
+ "java.util.function.DoubleConsumer",
+ "java.util.Spliterator$OfLong",
+ "java.util.stream.Collector",
+ "java.util.function.LongPredicate",
+ "java.util.function.ToLongFunction",
+ "java.util.function.LongToDoubleFunction",
+ "java.util.function.LongToIntFunction",
+ "java.util.PrimitiveIterator$OfInt",
+ "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.Spliterator",
+ "java.util.stream.IntStream",
+ "java.util.function.LongBinaryOperator",
+ "java.util.function.DoubleFunction",
+ "java.util.Spliterator$OfDouble",
+ "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.function.IntToDoubleFunction",
+ "java.util.stream.LongStream",
+ "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"
+ ],
"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",
- "java.util.LongSummaryStatistics": "java.util.LongSummaryStatisticsConversions",
- "java.util.IntSummaryStatistics": "java.util.IntSummaryStatisticsConversions",
- "java.util.DoubleSummaryStatistics": "java.util.DoubleSummaryStatisticsConversions"
+ "java.util.OptionalLong": "java.util.OptionalConversions"
}
},
{
"api_level_below_or_equal": 18,
"rewrite_prefix": {
"java.nio.charset.StandardCharsets": "j$.nio.charset.StandardCharsets"
+ }
+ }
+ ],
+ "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",
+ "java.util.TimeZone java.util.TimeZone#getTimeZone(java.time.ZoneId)": "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": 18,
+ "retarget_method": {
+ "boolean java.lang.Character#isBmpCodePoint(int)": "j$.lang.DesugarCharacter"
+ }
+ }
+ ],
+ "library_flags": [
+ {
+ "api_level_below_or_equal": 10000,
+ "rewrite_prefix": {
+ "desugar.": "j$.desugar.",
+ "java.lang.Desugar": "j$.lang.Desugar",
+ "java.lang.ref.Cleaner": "j$.lang.ref.Cleaner",
+ "libcore.": "j$.libcore.",
+ "sun.security.action.": "j$.sun.security.action."
+ }
+ },
+ {
+ "api_level_below_or_equal": 30,
+ "rewrite_prefix": {
+ "java.io.DesugarFile": "j$.io.DesugarFile",
+ "java.nio.Desugar": "j$.nio.Desugar",
+ "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"
},
- "retarget_lib_member": {
- "java.lang.Character#isBmpCodePoint": "j$.lang.DesugarCharacter"
+ "rewrite_derived_prefix": {
+ "java.time.": {
+ "j$.time.": "java.time."
+ }
+ },
+ "retarget_method": {
+ "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": 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.io.DesugarInputStream": "j$.io.DesugarInputStream",
+ "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"
+ }
+ }
+ },
+ {
+ "api_level_below_or_equal": 18,
+ "retarget_method": {
+ "boolean java.lang.Character#isBmpCodePoint(int)": "java.lang.DesugarCharacter"
}
}
],
@@ -332,4 +300,4 @@
"-keepattributes InnerClasses",
"-dontwarn sun.misc.Unsafe"
]
-}
+}
\ No newline at end of file
diff --git a/src/main/java/com/android/tools/r8/GenerateLintFiles.java b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
index 37c50c4..c062f43 100644
--- a/src/main/java/com/android/tools/r8/GenerateLintFiles.java
+++ b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
@@ -85,7 +85,10 @@
throws Exception {
DesugaredLibrarySpecification desugaredLibrarySpecification =
readDesugaredLibraryConfiguration(desugarConfigurationPath);
- assert desugaredLibrarySpecification.isLegacy();
+ if (!desugaredLibrarySpecification.isLegacy()) {
+ // TODO(b/184026720): To implement by forcing conversion to machine spec.
+ throw new Exception("Generation of lint files not supported from non legacy specification");
+ }
this.desugaredLibrarySpecification =
desugaredLibrarySpecification.asLegacyDesugaredLibrarySpecification();
this.desugaredLibraryImplementation = Paths.get(desugarImplementationPath);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibrarySpecification.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibrarySpecification.java
index d5740de..64a141e 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibrarySpecification.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibrarySpecification.java
@@ -28,6 +28,8 @@
boolean isEmpty();
+ boolean isLibraryCompilation();
+
String getJsonSource();
String getSynthesizedLibraryClassesPackagePrefix();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibrarySpecificationParser.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibrarySpecificationParser.java
index c614166..83ee3ec 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibrarySpecificationParser.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibrarySpecificationParser.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.utils.StringDiagnostic;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
+import java.util.function.Consumer;
public class DesugaredLibrarySpecificationParser {
@@ -37,6 +38,47 @@
} catch (Exception e) {
throw reporter.fatalError(new ExceptionDiagnostic(e, origin));
}
+
+ if (isHumanSpecification(jsonConfig, reporter, origin)) {
+ return new HumanDesugaredLibrarySpecificationParser(
+ dexItemFactory, reporter, libraryCompilation, minAPILevel)
+ .parse(origin, jsonConfigString, jsonConfig);
+ }
+ return new LegacyDesugaredLibrarySpecificationParser(
+ dexItemFactory, reporter, libraryCompilation, minAPILevel)
+ .parse(origin, jsonConfigString, jsonConfig);
+ }
+
+ public static DesugaredLibrarySpecification parseDesugaredLibrarySpecificationforTesting(
+ StringResource stringResource,
+ DexItemFactory dexItemFactory,
+ Reporter reporter,
+ boolean libraryCompilation,
+ int minAPILevel,
+ Consumer<TopLevelFlagsBuilder<?>> topLevelFlagsAmender) {
+ Origin origin = stringResource.getOrigin();
+ assert origin != null;
+ String jsonConfigString;
+ JsonObject jsonConfig;
+ try {
+ jsonConfigString = stringResource.getString();
+ JsonParser parser = new JsonParser();
+ jsonConfig = parser.parse(jsonConfigString).getAsJsonObject();
+ } catch (Exception e) {
+ throw reporter.fatalError(new ExceptionDiagnostic(e, origin));
+ }
+ if (isHumanSpecification(jsonConfig, reporter, origin)) {
+ return new HumanDesugaredLibrarySpecificationParser(
+ dexItemFactory, reporter, libraryCompilation, minAPILevel)
+ .parse(origin, jsonConfigString, jsonConfig, topLevelFlagsAmender);
+ }
+ return new LegacyDesugaredLibrarySpecificationParser(
+ dexItemFactory, reporter, libraryCompilation, minAPILevel)
+ .parse(origin, jsonConfigString, jsonConfig, topLevelFlagsAmender);
+ }
+
+ public static boolean isHumanSpecification(
+ JsonObject jsonConfig, Reporter reporter, Origin origin) {
if (!jsonConfig.has(CONFIGURATION_FORMAT_VERSION_KEY)) {
throw reporter.fatalError(
new StringDiagnostic(
@@ -46,14 +88,7 @@
origin));
}
- if (jsonConfig.get(CONFIGURATION_FORMAT_VERSION_KEY).getAsInt()
- >= MIN_HUMAN_CONFIGURATION_FORMAT_VERSION) {
- return new HumanDesugaredLibrarySpecificationParser(
- dexItemFactory, reporter, libraryCompilation, minAPILevel)
- .parse(origin, jsonConfigString, jsonConfig);
- }
- return new LegacyDesugaredLibrarySpecificationParser(
- dexItemFactory, reporter, libraryCompilation, minAPILevel)
- .parse(origin, jsonConfigString, jsonConfig);
+ return jsonConfig.get(CONFIGURATION_FORMAT_VERSION_KEY).getAsInt()
+ >= MIN_HUMAN_CONFIGURATION_FORMAT_VERSION;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/TopLevelFlagsBuilder.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/TopLevelFlagsBuilder.java
new file mode 100644
index 0000000..e7c7bb5
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/TopLevelFlagsBuilder.java
@@ -0,0 +1,10 @@
+// Copyright (c) 2022, 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.
+
+package com.android.tools.r8.ir.desugar.desugaredlibrary;
+
+public interface TopLevelFlagsBuilder<T extends TopLevelFlagsBuilder<?>> {
+
+ T setSupportAllCallbacksFromLibrary(boolean supportAllCallbacksFromLibrary);
+}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanDesugaredLibrarySpecification.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanDesugaredLibrarySpecification.java
index 15ec7dd..88de477 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanDesugaredLibrarySpecification.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanDesugaredLibrarySpecification.java
@@ -52,6 +52,7 @@
return topLevelFlags.getRequiredCompilationAPILevel();
}
+ @Override
public boolean isLibraryCompilation() {
return libraryCompilation;
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanDesugaredLibrarySpecificationParser.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanDesugaredLibrarySpecificationParser.java
index 2aecff0..bb4bc68 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanDesugaredLibrarySpecificationParser.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanDesugaredLibrarySpecificationParser.java
@@ -5,11 +5,13 @@
package com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification;
import static com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser.CONFIGURATION_FORMAT_VERSION_KEY;
+import static com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser.isHumanSpecification;
import com.android.tools.r8.StringResource;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.TopLevelFlagsBuilder;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.DescriptorUtils;
@@ -102,13 +104,8 @@
}
public HumanDesugaredLibrarySpecification parse(StringResource stringResource) {
- return parse(stringResource, builder -> {});
- }
-
- public HumanDesugaredLibrarySpecification parse(
- StringResource stringResource, Consumer<HumanTopLevelFlags.Builder> topLevelFlagAmender) {
String jsonConfigString = parseJson(stringResource);
- return parse(origin, jsonConfigString, jsonConfig, topLevelFlagAmender);
+ return parse(origin, jsonConfigString, jsonConfig, ignored -> {});
}
public HumanDesugaredLibrarySpecification parse(
@@ -116,11 +113,15 @@
return parse(origin, jsonConfigString, jsonConfig, ignored -> {});
}
- private HumanDesugaredLibrarySpecification parse(
+ public HumanDesugaredLibrarySpecification parse(
Origin origin,
String jsonConfigString,
JsonObject jsonConfig,
- Consumer<HumanTopLevelFlags.Builder> topLevelFlagAmender) {
+ Consumer<TopLevelFlagsBuilder<?>> topLevelFlagAmender) {
+ if (!isHumanSpecification(jsonConfig, reporter, origin)) {
+ reporter.error(
+ "Attempt to parse a non desugared library human specification as a human specification.");
+ }
this.origin = origin;
this.jsonConfig = jsonConfig;
HumanTopLevelFlags topLevelFlags = parseTopLevelFlags(jsonConfigString, topLevelFlagAmender);
@@ -165,7 +166,7 @@
}
HumanTopLevelFlags parseTopLevelFlags(
- String jsonConfigString, Consumer<HumanTopLevelFlags.Builder> topLevelFlagAmender) {
+ String jsonConfigString, Consumer<TopLevelFlagsBuilder<?>> topLevelFlagAmender) {
HumanTopLevelFlags.Builder builder = HumanTopLevelFlags.builder();
builder.setJsonSource(jsonConfigString);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanRewritingFlags.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanRewritingFlags.java
index d9dd3bc..ece6fe0 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanRewritingFlags.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanRewritingFlags.java
@@ -131,7 +131,10 @@
}
public boolean isEmpty() {
- return rewritePrefix.isEmpty() && emulatedInterfaces.isEmpty() && retargetMethod.isEmpty();
+ return rewritePrefix.isEmpty()
+ && rewriteDerivedPrefix.isEmpty()
+ && emulatedInterfaces.isEmpty()
+ && retargetMethod.isEmpty();
}
public static class Builder {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanTopLevelFlags.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanTopLevelFlags.java
index 80a13b5..409cf74 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanTopLevelFlags.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanTopLevelFlags.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.TopLevelFlagsBuilder;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.google.common.collect.ImmutableList;
import java.util.List;
@@ -77,7 +78,7 @@
return extraKeepRules;
}
- public static class Builder {
+ public static class Builder implements TopLevelFlagsBuilder<Builder> {
private AndroidApiLevel requiredCompilationAPILevel;
private String synthesizedLibraryClassesPackagePrefix;
@@ -108,6 +109,7 @@
return this;
}
+ @Override
public Builder setSupportAllCallbacksFromLibrary(boolean supportAllCallbacksFromLibrary) {
this.supportAllCallbacksFromLibrary = supportAllCallbacksFromLibrary;
return this;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.java
index 4422b66..afc7dd6 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.java
@@ -62,9 +62,19 @@
deduplicateFlags(library, program, commonBuilder, libraryBuilder);
deduplicateFlags(program, library, commonBuilder, programBuilder);
- commonFlags.put(api, commonBuilder.build());
- libraryFlags.put(api, libraryBuilder.build());
- programFlags.put(api, programBuilder.build());
+ putNewFlags(api, commonFlags, commonBuilder);
+ putNewFlags(api, libraryFlags, libraryBuilder);
+ putNewFlags(api, programFlags, programBuilder);
+ }
+
+ private static void putNewFlags(
+ int api, Int2ObjectMap<HumanRewritingFlags> flags, HumanRewritingFlags.Builder builder) {
+ HumanRewritingFlags build = builder.build();
+ if (build.isEmpty()) {
+ flags.remove(api);
+ } else {
+ flags.put(api, build);
+ }
}
private static void deduplicateFlags(
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationJsonExporter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationJsonExporter.java
index f528446..97749d6 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationJsonExporter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationJsonExporter.java
@@ -37,6 +37,7 @@
import com.google.gson.Gson;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import java.util.ArrayList;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
@@ -62,7 +63,7 @@
humanSpec.getTopLevelFlags().getRequiredCompilationAPILevel().getLevel());
toJson.put(
SYNTHESIZED_LIBRARY_CLASSES_PACKAGE_PREFIX_KEY,
- humanSpec.getTopLevelFlags().getSynthesizedLibraryClassesPackagePrefix());
+ humanSpec.getTopLevelFlags().getSynthesizedLibraryClassesPackagePrefix().replace('/', '.'));
toJson.put(
SUPPORT_ALL_CALLBACKS_FROM_LIBRARY_KEY,
humanSpec.getTopLevelFlags().supportAllCallbacksFromLibrary());
@@ -81,47 +82,48 @@
private List<Object> rewritingFlagsToString(
Int2ObjectMap<HumanRewritingFlags> rewritingFlagsMap) {
ArrayList<Object> list = new ArrayList<>();
- rewritingFlagsMap.forEach(
- (apiBelowOrEqual, flags) -> {
- HashMap<String, Object> toJson = new LinkedHashMap<>();
- toJson.put(API_LEVEL_BELOW_OR_EQUAL_KEY, apiBelowOrEqual);
- if (!flags.getRewritePrefix().isEmpty()) {
- toJson.put(REWRITE_PREFIX_KEY, new TreeMap<>(flags.getRewritePrefix()));
- }
- if (!flags.getRewriteDerivedPrefix().isEmpty()) {
- TreeMap<String, Map<String, String>> rewriteDerivedPrefix = new TreeMap<>();
- flags
- .getRewriteDerivedPrefix()
- .forEach((k, v) -> rewriteDerivedPrefix.put(k, new TreeMap<>(v)));
- toJson.put(REWRITE_DERIVED_PREFIX_KEY, rewriteDerivedPrefix);
- }
- if (!flags.getEmulatedInterfaces().isEmpty()) {
- toJson.put(EMULATE_INTERFACE_KEY, mapToString(flags.getEmulatedInterfaces()));
- }
- if (!flags.getDontRewriteInvocation().isEmpty()) {
- toJson.put(DONT_REWRITE_KEY, setToString(flags.getDontRewriteInvocation()));
- }
- if (!flags.getRetargetMethod().isEmpty()) {
- toJson.put(RETARGET_METHOD_KEY, mapToString(flags.getRetargetMethod()));
- }
- if (!flags.getDontRetarget().isEmpty()) {
- toJson.put(DONT_RETARGET_KEY, setToString(flags.getDontRetarget()));
- }
- if (!flags.getLegacyBackport().isEmpty()) {
- toJson.put(BACKPORT_KEY, mapToString(flags.getLegacyBackport()));
- }
- if (!flags.getWrapperConversions().isEmpty()) {
- toJson.put(WRAPPER_CONVERSION_KEY, setToString(flags.getWrapperConversions()));
- }
- if (!flags.getCustomConversions().isEmpty()) {
- toJson.put(CUSTOM_CONVERSION_KEY, mapToString(flags.getCustomConversions()));
- }
- if (!flags.getAmendLibraryMethod().isEmpty()) {
- toJson.put(
- AMEND_LIBRARY_METHOD_KEY, amendLibraryToString(flags.getAmendLibraryMethod()));
- }
- list.add(toJson);
- });
+ ArrayList<Integer> apis = new ArrayList<>(rewritingFlagsMap.keySet());
+ apis.sort(Comparator.reverseOrder());
+ for (int apiBelowOrEqual : apis) {
+ HumanRewritingFlags flags = rewritingFlagsMap.get(apiBelowOrEqual);
+ HashMap<String, Object> toJson = new LinkedHashMap<>();
+ toJson.put(API_LEVEL_BELOW_OR_EQUAL_KEY, apiBelowOrEqual);
+ if (!flags.getRewritePrefix().isEmpty()) {
+ toJson.put(REWRITE_PREFIX_KEY, new TreeMap<>(flags.getRewritePrefix()));
+ }
+ if (!flags.getRewriteDerivedPrefix().isEmpty()) {
+ TreeMap<String, Map<String, String>> rewriteDerivedPrefix = new TreeMap<>();
+ flags
+ .getRewriteDerivedPrefix()
+ .forEach((k, v) -> rewriteDerivedPrefix.put(k, new TreeMap<>(v)));
+ toJson.put(REWRITE_DERIVED_PREFIX_KEY, rewriteDerivedPrefix);
+ }
+ if (!flags.getEmulatedInterfaces().isEmpty()) {
+ toJson.put(EMULATE_INTERFACE_KEY, mapToString(flags.getEmulatedInterfaces()));
+ }
+ if (!flags.getDontRewriteInvocation().isEmpty()) {
+ toJson.put(DONT_REWRITE_KEY, setToString(flags.getDontRewriteInvocation()));
+ }
+ if (!flags.getRetargetMethod().isEmpty()) {
+ toJson.put(RETARGET_METHOD_KEY, mapToString(flags.getRetargetMethod()));
+ }
+ if (!flags.getDontRetarget().isEmpty()) {
+ toJson.put(DONT_RETARGET_KEY, setToString(flags.getDontRetarget()));
+ }
+ if (!flags.getLegacyBackport().isEmpty()) {
+ toJson.put(BACKPORT_KEY, mapToString(flags.getLegacyBackport()));
+ }
+ if (!flags.getWrapperConversions().isEmpty()) {
+ toJson.put(WRAPPER_CONVERSION_KEY, setToString(flags.getWrapperConversions()));
+ }
+ if (!flags.getCustomConversions().isEmpty()) {
+ toJson.put(CUSTOM_CONVERSION_KEY, mapToString(flags.getCustomConversions()));
+ }
+ if (!flags.getAmendLibraryMethod().isEmpty()) {
+ toJson.put(AMEND_LIBRARY_METHOD_KEY, amendLibraryToString(flags.getAmendLibraryMethod()));
+ }
+ list.add(toJson);
+ }
return list;
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyDesugaredLibrarySpecification.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyDesugaredLibrarySpecification.java
index 8a7df1c..5fbf206 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyDesugaredLibrarySpecification.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyDesugaredLibrarySpecification.java
@@ -67,6 +67,7 @@
return topLevelFlags.getRequiredCompilationAPILevel();
}
+ @Override
public boolean isLibraryCompilation() {
return libraryCompilation;
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyDesugaredLibrarySpecificationParser.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyDesugaredLibrarySpecificationParser.java
index e6e2094..5b6933d 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyDesugaredLibrarySpecificationParser.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyDesugaredLibrarySpecificationParser.java
@@ -5,9 +5,11 @@
package com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification;
import static com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser.CONFIGURATION_FORMAT_VERSION_KEY;
+import static com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser.isHumanSpecification;
import com.android.tools.r8.StringResource;
import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.TopLevelFlagsBuilder;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.ExceptionDiagnostic;
@@ -98,13 +100,8 @@
}
public LegacyDesugaredLibrarySpecification parse(StringResource stringResource) {
- return parse(stringResource, builder -> {});
- }
-
- public LegacyDesugaredLibrarySpecification parse(
- StringResource stringResource, Consumer<LegacyTopLevelFlags.Builder> topLevelFlagAmender) {
String jsonConfigString = parseJson(stringResource);
- return parse(origin, jsonConfigString, jsonConfig, topLevelFlagAmender);
+ return parse(origin, jsonConfigString, jsonConfig, ignored -> {});
}
public LegacyDesugaredLibrarySpecification parse(
@@ -112,11 +109,15 @@
return parse(origin, jsonConfigString, jsonConfig, ignored -> {});
}
- private LegacyDesugaredLibrarySpecification parse(
+ public LegacyDesugaredLibrarySpecification parse(
Origin origin,
String jsonConfigString,
JsonObject jsonConfig,
- Consumer<LegacyTopLevelFlags.Builder> topLevelFlagAmender) {
+ Consumer<TopLevelFlagsBuilder<?>> topLevelFlagAmender) {
+ if (isHumanSpecification(jsonConfig, reporter, origin)) {
+ reporter.error(
+ "Attempt to parse a desugared library human specification as a legacy specification.");
+ }
this.origin = origin;
this.jsonConfig = jsonConfig;
LegacyTopLevelFlags topLevelFlags = parseTopLevelFlags(jsonConfigString, topLevelFlagAmender);
@@ -162,7 +163,7 @@
}
LegacyTopLevelFlags parseTopLevelFlags(
- String jsonConfigString, Consumer<LegacyTopLevelFlags.Builder> topLevelFlagAmender) {
+ String jsonConfigString, Consumer<TopLevelFlagsBuilder<?>> topLevelFlagAmender) {
LegacyTopLevelFlags.Builder builder = LegacyTopLevelFlags.builder();
builder.setJsonSource(jsonConfigString);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyRewritingFlags.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyRewritingFlags.java
index ac9d662..9a38ff1a 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyRewritingFlags.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyRewritingFlags.java
@@ -170,14 +170,16 @@
this.factory = factory;
this.reporter = reporter;
this.origin = origin;
- this.rewritePrefix = rewritePrefix;
- this.emulateLibraryInterface = emulateLibraryInterface;
- this.retargetCoreLibMember = retargetCoreLibMember;
- this.backportCoreLibraryMember = backportCoreLibraryMember;
- this.customConversions = customConversions;
- this.dontRewriteInvocation = dontRewriteInvocation;
- this.dontRetargetLibMember = dontRetargetLibMember;
- this.wrapperConversions = wrapperConversions;
+ this.rewritePrefix = new HashMap<>(rewritePrefix);
+ this.emulateLibraryInterface = new IdentityHashMap<>(emulateLibraryInterface);
+ this.retargetCoreLibMember = new IdentityHashMap<>(retargetCoreLibMember);
+ this.backportCoreLibraryMember = new IdentityHashMap<>(backportCoreLibraryMember);
+ this.customConversions = new IdentityHashMap<>(customConversions);
+ this.dontRewriteInvocation = new ArrayList<>(dontRewriteInvocation);
+ this.dontRetargetLibMember = Sets.newIdentityHashSet();
+ this.dontRetargetLibMember.addAll(dontRetargetLibMember);
+ this.wrapperConversions = Sets.newIdentityHashSet();
+ this.wrapperConversions.addAll(wrapperConversions);
}
// Utility to set values. Currently assumes the key is fresh.
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyTopLevelFlags.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyTopLevelFlags.java
index 8e0293b..59a3733 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyTopLevelFlags.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/legacyspecification/LegacyTopLevelFlags.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.TopLevelFlagsBuilder;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.google.common.collect.ImmutableList;
import java.util.List;
@@ -90,7 +91,7 @@
return extraKeepRules;
}
- public static class Builder {
+ public static class Builder implements TopLevelFlagsBuilder<Builder> {
private AndroidApiLevel requiredCompilationAPILevel;
private String synthesizedLibraryClassesPackagePrefix =
@@ -122,6 +123,7 @@
return this;
}
+ @Override
public Builder setSupportAllCallbacksFromLibrary(boolean supportAllCallbacksFromLibrary) {
this.supportAllCallbacksFromLibrary = supportAllCallbacksFromLibrary;
return this;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachinePrefixConverter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachinePrefixConverter.java
index 5dad42c..55ac78c 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachinePrefixConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachinePrefixConverter.java
@@ -89,6 +89,9 @@
private void rewriteClasses() {
for (DexClass clazz : appInfo.app().asDirect().libraryClasses()) {
+ if (clazz.toString().contains("MonthDay")) {
+ clazz.toString();
+ }
registerType(clazz.type);
registerDifferentType(clazz.type);
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineRetargetConverter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineRetargetConverter.java
index 8549488..6268125 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineRetargetConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineRetargetConverter.java
@@ -56,7 +56,7 @@
DexClass holder = appInfo.definitionFor(method.holder);
DexEncodedMethod foundMethod = holder.lookupMethod(method);
if (foundMethod == null) {
- missingMethods.add(foundMethod.getReference());
+ missingMethods.add(method);
return;
}
if (foundMethod.isStatic()) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineSpecificationConverter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineSpecificationConverter.java
index fac9895..0701952 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineSpecificationConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineSpecificationConverter.java
@@ -28,6 +28,7 @@
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.ThreadUtils;
import com.android.tools.r8.utils.Timing;
+import com.google.common.collect.Sets;
import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
@@ -38,6 +39,7 @@
public class HumanToMachineSpecificationConverter {
private AppView<?> appView;
+ private final Set<DexType> missingCustomConversions = Sets.newIdentityHashSet();
public MachineDesugaredLibrarySpecification convert(
HumanDesugaredLibrarySpecification humanSpec,
@@ -78,7 +80,10 @@
throws IOException {
DexApplication app = readApp(inputApp, options);
appView = AppView.createForD8(AppInfo.createInitialAppInfo(app));
- LibraryValidator.validate(app, humanSpec.getTopLevelFlags().getRequiredCompilationAPILevel());
+ LibraryValidator.validate(
+ app,
+ humanSpec.isLibraryCompilation(),
+ humanSpec.getTopLevelFlags().getRequiredCompilationAPILevel());
MachineRewritingFlags machineRewritingFlags =
convertRewritingFlags(
humanSpec.getSynthesizedLibraryClassesPackagePrefix(), humanSpec.getRewritingFlags());
@@ -116,6 +121,8 @@
.forEach(
(type, conversionType) ->
convertCustomConversion(appInfo, builder, type, conversionType));
+ warnMissingReferences(
+ "Cannot register custom conversion due to missing type: ", missingCustomConversions);
rewritingFlags.getDontRetarget().forEach(builder::addDontRetarget);
rewritingFlags.getLegacyBackport().forEach(builder::putLegacyBackport);
return builder.build();
@@ -127,6 +134,10 @@
DexType type,
DexType conversionType) {
DexType rewrittenType = builder.getRewrittenType(type);
+ if (rewrittenType == null) {
+ missingCustomConversions.add(type);
+ return;
+ }
DexProto fromProto = appInfo.dexItemFactory().createProto(rewrittenType, type);
DexMethod fromMethod =
appInfo
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/LegacyToHumanSpecificationConverter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/LegacyToHumanSpecificationConverter.java
index d7bd243..3a2c990 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/LegacyToHumanSpecificationConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/LegacyToHumanSpecificationConverter.java
@@ -61,8 +61,6 @@
.parseMultiLevelConfiguration(inputSpecification);
MultiAPILevelHumanDesugaredLibrarySpecification humanSpec =
convertAllAPILevels(legacySpec, androidLib, options);
- MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.deduplicateFlags(
- humanSpec, options.reporter);
MultiAPILevelHumanDesugaredLibrarySpecificationJsonExporter.export(humanSpec, output);
}
@@ -74,7 +72,6 @@
Origin origin = legacySpec.getOrigin();
AndroidApp androidApp = AndroidApp.builder().addLibraryFile(androidLib).build();
DexApplication app = readApp(androidApp, options);
- LibraryValidator.validate(app, legacySpec.getTopLevelFlags().getRequiredCompilationAPILevel());
HumanTopLevelFlags humanTopLevelFlags = convertTopLevelFlags(legacySpec.getTopLevelFlags());
Int2ObjectArrayMap<HumanRewritingFlags> commonFlags =
convertRewritingFlagMap(legacySpec.getCommonFlags(), app, origin);
@@ -85,8 +82,12 @@
legacyLibraryFlagHacks(libraryFlags, app, origin);
- return new MultiAPILevelHumanDesugaredLibrarySpecification(
- origin, humanTopLevelFlags, commonFlags, libraryFlags, programFlags);
+ MultiAPILevelHumanDesugaredLibrarySpecification humanSpec =
+ new MultiAPILevelHumanDesugaredLibrarySpecification(
+ origin, humanTopLevelFlags, commonFlags, libraryFlags, programFlags);
+ MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.deduplicateFlags(
+ humanSpec, options.reporter);
+ return humanSpec;
}
public HumanDesugaredLibrarySpecification convert(
@@ -112,7 +113,10 @@
LegacyDesugaredLibrarySpecification legacySpec, AndroidApp inputApp, InternalOptions options)
throws IOException {
DexApplication app = readApp(inputApp, options);
- LibraryValidator.validate(app, legacySpec.getTopLevelFlags().getRequiredCompilationAPILevel());
+ LibraryValidator.validate(
+ app,
+ legacySpec.isLibraryCompilation(),
+ legacySpec.getTopLevelFlags().getRequiredCompilationAPILevel());
HumanTopLevelFlags humanTopLevelFlags = convertTopLevelFlags(legacySpec.getTopLevelFlags());
// The origin is not maintained in non multi-level specifications.
// It should not matter since the origin is used to report invalid specifications, and
@@ -136,6 +140,9 @@
Int2ObjectArrayMap<HumanRewritingFlags> libraryFlags, DexApplication app, Origin origin) {
int level = legacyHackLevel.getLevel();
HumanRewritingFlags humanRewritingFlags = libraryFlags.get(level);
+ if (humanRewritingFlags == null) {
+ return;
+ }
HumanRewritingFlags.Builder builder =
humanRewritingFlags.newBuilder(app.options.reporter, origin);
legacyLibraryFlagHacks(app.dexItemFactory(), builder);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/LibraryValidator.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/LibraryValidator.java
index b415c354..ef19eb6 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/LibraryValidator.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/LibraryValidator.java
@@ -11,9 +11,16 @@
public class LibraryValidator {
- // Estimates if the library passed is at the expected minimum level, if it is not, raise
- // a warning.
- public static void validate(DexApplication app, AndroidApiLevel requiredCompilationAPILevel) {
+ /**
+ * In program compilation, The LibraryValidator estimates if the library passed is at the expected
+ * minimum level, if it is not, raises a warning.
+ */
+ public static void validate(
+ DexApplication app, boolean libraryCompilation, AndroidApiLevel requiredCompilationAPILevel) {
+ if (libraryCompilation) {
+ // In library compilation, the classes are passed as program classes and are always found.
+ return;
+ }
DexType levelType;
if (requiredCompilationAPILevel.isEqualTo(AndroidApiLevel.O)) {
levelType = app.dexItemFactory.createType("Ljava/time/LocalTime;");
diff --git a/src/test/java/com/android/tools/r8/MarkersTest.java b/src/test/java/com/android/tools/r8/MarkersTest.java
index d883360..a38cf08 100644
--- a/src/test/java/com/android/tools/r8/MarkersTest.java
+++ b/src/test/java/com/android/tools/r8/MarkersTest.java
@@ -19,6 +19,7 @@
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
+import com.android.tools.r8.desugar.desugaredlibrary.DesugaredLibraryTestBase;
import com.android.tools.r8.dex.Marker;
import com.android.tools.r8.dex.Marker.Tool;
import com.android.tools.r8.origin.Origin;
@@ -27,6 +28,7 @@
import com.android.tools.r8.utils.FileUtils;
import com.google.common.base.Charsets;
import com.google.common.collect.ImmutableList;
+import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.nio.file.Path;
import java.util.Collection;
@@ -36,7 +38,7 @@
import org.junit.runners.Parameterized;
@RunWith(Parameterized.class)
-public class MarkersTest extends TestBase {
+public class MarkersTest extends DesugaredLibraryTestBase {
@Parameterized.Parameters(
name = "{0}, compilationMode {1}, shrinkDesugaredLibrary {2}, noCfMarkerForDesugaredCode {3}")
@@ -84,18 +86,20 @@
}
L8.run(builder.build());
Collection<Marker> markers = ExtractMarker.extractMarkerFromDexFile(output);
- String version =
+ JsonObject jsonObject =
new JsonParser()
.parse(FileUtils.readTextFile(ToolHelper.getDesugarLibJsonForTesting(), Charsets.UTF_8))
- .getAsJsonObject()
- .get("version")
- .getAsString();
+ .getAsJsonObject();
+ String identifier =
+ jsonObject.has("version")
+ ? "com.tools.android:desugar_jdk_libs:" + jsonObject.get("version").getAsString()
+ : jsonObject.get("identifier").getAsString();
Matcher<Marker> l8Matcher =
allOf(
markerTool(Tool.L8),
markerCompilationMode(compilationMode),
- markerDesugaredLibraryIdentifier("com.tools.android:desugar_jdk_libs:" + version),
+ markerDesugaredLibraryIdentifier(identifier),
markerHasChecksums(false));
Matcher<Marker> r8Matcher =
allOf(
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 b5e5c03..6d3a0d3 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
@@ -10,8 +10,8 @@
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.legacyspecification.LegacyDesugaredLibrarySpecification;
-import com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification.LegacyDesugaredLibrarySpecificationParser;
+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;
@@ -60,16 +60,16 @@
: "Caught j$.io.UncheckedIOException");
}
- LegacyDesugaredLibrarySpecification configurationAlternative3(
+ 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 new LegacyDesugaredLibrarySpecificationParser(
- options.dexItemFactory(),
- options.reporter,
- libraryCompilation,
- parameters.getApiLevel().getLevel())
- .parse(StringResource.fromFile(ToolHelper.getDesugarLibJsonForTestingAlternative3()));
+ return DesugaredLibrarySpecificationParser.parseDesugaredLibrarySpecification(
+ StringResource.fromFile(ToolHelper.getDesugarLibJsonForTestingAlternative3()),
+ options.dexItemFactory(),
+ options.reporter,
+ libraryCompilation,
+ parameters.getApiLevel().getLevel());
}
private void configurationForProgramCompilation(InternalOptions options) {
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryCHMOnlyContentTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryCHMOnlyContentTest.java
index e27dda9..4d87dbf 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryCHMOnlyContentTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryCHMOnlyContentTest.java
@@ -8,8 +8,8 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification.LegacyDesugaredLibrarySpecification;
-import com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification.LegacyDesugaredLibrarySpecificationParser;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecification;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.nio.file.Path;
@@ -67,13 +67,13 @@
assert inspector.clazz("j$.util.concurrent.ConcurrentHashMap").isPresent();
}
- LegacyDesugaredLibrarySpecification chmOnlyConfiguration(
+ DesugaredLibrarySpecification chmOnlyConfiguration(
InternalOptions options, boolean libraryCompilation, TestParameters parameters) {
- return new LegacyDesugaredLibrarySpecificationParser(
- options.dexItemFactory(),
- options.reporter,
- libraryCompilation,
- parameters.getApiLevel().getLevel())
- .parse(StringResource.fromFile(ToolHelper.getCHMOnlyDesugarLibJsonForTesting()));
+ return DesugaredLibrarySpecificationParser.parseDesugaredLibrarySpecification(
+ StringResource.fromFile(ToolHelper.getCHMOnlyDesugarLibJsonForTesting()),
+ options.dexItemFactory(),
+ options.reporter,
+ libraryCompilation,
+ parameters.getApiLevel().getLevel());
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryContentTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryContentTest.java
index f4786f7..c1066de 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryContentTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryContentTest.java
@@ -11,10 +11,10 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.fail;
+import com.android.tools.r8.D8TestCompileResult;
import com.android.tools.r8.L8Command;
-import com.android.tools.r8.L8TestBuilder;
+import com.android.tools.r8.LibraryDesugaringTestConfiguration;
import com.android.tools.r8.OutputMode;
import com.android.tools.r8.StringResource;
import com.android.tools.r8.TestDiagnosticMessages;
@@ -29,7 +29,6 @@
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import java.nio.file.Path;
import java.util.ArrayList;
-import java.util.Collections;
import org.junit.Assume;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -52,20 +51,15 @@
@Test
public void testInvalidLibrary() throws Exception {
Assume.assumeTrue(requiresAnyCoreLibDesugaring(parameters));
- L8TestBuilder l8TestBuilder =
- testForL8(parameters.getApiLevel())
- .addProgramFiles(Collections.singleton(ToolHelper.getDesugarJDKLibs()))
+ D8TestCompileResult compile =
+ testForD8()
+ .addProgramClasses(GuineaPig.class)
.addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.L))
- .setDesugarJDKLibsConfiguration(ToolHelper.DESUGAR_LIB_CONVERSIONS);
- try {
- l8TestBuilder.compile();
- fail();
- } catch (AssertionError ae) {
- // Expected since the library is invalid.
- }
- TestDiagnosticMessages diagnosticMessages = l8TestBuilder.getDiagnosticMessages();
+ .enableCoreLibraryDesugaring(
+ LibraryDesugaringTestConfiguration.forApiLevel(parameters.getApiLevel()))
+ .compile();
+ TestDiagnosticMessages diagnosticMessages = compile.getDiagnosticMessages();
diagnosticMessages.assertOnlyWarnings();
- assertEquals(diagnosticMessages.getWarnings().size(), 1);
assertTrue(
diagnosticMessages
.getWarnings()
@@ -166,4 +160,8 @@
}
}
+ static class GuineaPig {
+
+ public static void main(String[] args) {}
+ }
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java
index 612d36e..f50960b 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java
@@ -25,8 +25,7 @@
import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecification;
-import com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification.LegacyDesugaredLibrarySpecification;
-import com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification.LegacyDesugaredLibrarySpecificationParser;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser;
import com.android.tools.r8.tracereferences.TraceReferences;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.FileUtils;
@@ -50,7 +49,7 @@
public class DesugaredLibraryTestBase extends TestBase {
- private static final boolean FORCE_JDK11_DESUGARED_LIB = false;
+ private static final boolean FORCE_JDK11_DESUGARED_LIB = true;
@BeforeClass
public static void setUpDesugaredLibrary() {
@@ -250,19 +249,18 @@
return desugaredLib;
}
- protected LegacyDesugaredLibrarySpecification configurationWithSupportAllCallbacksFromLibrary(
+ protected DesugaredLibrarySpecification configurationWithSupportAllCallbacksFromLibrary(
InternalOptions options,
boolean libraryCompilation,
TestParameters parameters,
boolean supportAllCallbacksFromLibrary) {
- return new LegacyDesugaredLibrarySpecificationParser(
- options.dexItemFactory(),
- options.reporter,
- libraryCompilation,
- parameters.getApiLevel().getLevel())
- .parse(
- StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()),
- builder -> builder.setSupportAllCallbacksFromLibrary(supportAllCallbacksFromLibrary));
+ return DesugaredLibrarySpecificationParser.parseDesugaredLibrarySpecificationforTesting(
+ StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()),
+ options.dexItemFactory(),
+ options.reporter,
+ libraryCompilation,
+ parameters.getApiLevel().getLevel(),
+ builder -> builder.setSupportAllCallbacksFromLibrary(supportAllCallbacksFromLibrary));
}
private Map<AndroidApiLevel, Path> desugaredLibraryClassFileCache = new HashMap<>();
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ExtractWrapperTypesTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ExtractWrapperTypesTest.java
index 21dc2f9..581a153 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ExtractWrapperTypesTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ExtractWrapperTypesTest.java
@@ -10,7 +10,6 @@
import com.android.tools.r8.GenerateLintFiles;
import com.android.tools.r8.StringResource;
-import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper;
@@ -41,12 +40,13 @@
import java.util.TreeSet;
import java.util.function.Consumer;
import java.util.stream.Collectors;
+import org.junit.Assume;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@RunWith(Parameterized.class)
-public class ExtractWrapperTypesTest extends TestBase {
+public class ExtractWrapperTypesTest extends DesugaredLibraryTestBase {
// Filter on types that do not need to be considered for wrapping.
private static boolean doesNotNeedWrapper(String type, Set<String> customConversions) {
@@ -273,6 +273,7 @@
private CodeInspector getDesugaredApiJar() throws Exception {
Path out = temp.newFolder().toPath();
+ Assume.assumeFalse("TODO(b/184026720): Support lint generation.", isJDK11DesugaredLibrary());
GenerateLintFiles desugaredApi =
new GenerateLintFiles(
ToolHelper.getDesugarLibJsonForTesting().toString(),
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryConfigurationParsingTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LegacyDesugaredLibraryConfigurationParsingTest.java
similarity index 97%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryConfigurationParsingTest.java
rename to src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LegacyDesugaredLibraryConfigurationParsingTest.java
index efc5ce8..7bf2046 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryConfigurationParsingTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/LegacyDesugaredLibraryConfigurationParsingTest.java
@@ -1,4 +1,4 @@
-// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
+// Copyright (c) 2022, 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.
package com.android.tools.r8.desugar.desugaredlibrary;
@@ -12,7 +12,6 @@
import com.android.tools.r8.DiagnosticsHandler;
import com.android.tools.r8.StringResource;
-import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestDiagnosticMessages;
import com.android.tools.r8.TestDiagnosticMessagesImpl;
import com.android.tools.r8.TestParameters;
@@ -38,19 +37,20 @@
import java.util.Map;
import java.util.function.Consumer;
import java.util.stream.Collectors;
+import org.junit.Assume;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@RunWith(Parameterized.class)
-public class DesugaredLibraryConfigurationParsingTest extends TestBase {
+public class LegacyDesugaredLibraryConfigurationParsingTest extends DesugaredLibraryTestBase {
@Parameterized.Parameters(name = "{0}")
public static TestParametersCollection data() {
return getTestParameters().withNoneRuntime().build();
}
- public DesugaredLibraryConfigurationParsingTest(TestParameters parameters) {
+ public LegacyDesugaredLibraryConfigurationParsingTest(TestParameters parameters) {
parameters.assertNoneRuntime();
}
@@ -87,6 +87,7 @@
}
private LegacyDesugaredLibrarySpecificationParser parser(DiagnosticsHandler handler) {
+ Assume.assumeFalse(isJDK11DesugaredLibrary());
return new LegacyDesugaredLibrarySpecificationParser(
factory, new Reporter(handler), libraryCompilation, minApi.getLevel());
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ObjectsTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ObjectsTest.java
index ed772cb..c21b7ea 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ObjectsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ObjectsTest.java
@@ -15,8 +15,8 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification.LegacyDesugaredLibrarySpecification;
-import com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification.LegacyDesugaredLibrarySpecificationParser;
+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;
@@ -84,18 +84,17 @@
Ordered.max(parameters.getApiLevel(), getRequiredCompilationAPILevel()));
}
- LegacyDesugaredLibrarySpecification desugaredLibrarySpecification(
+ DesugaredLibrarySpecification desugaredLibrarySpecification(
InternalOptions options, boolean libraryCompilation, TestParameters parameters) {
- return new LegacyDesugaredLibrarySpecificationParser(
- options.dexItemFactory(),
- options.reporter,
- libraryCompilation,
- parameters.getApiLevel().getLevel())
- .parse(
- StringResource.fromFile(
- libraryDesugarJavaUtilObjects
- ? ToolHelper.getDesugarLibJsonForTestingAlternative3()
- : ToolHelper.getDesugarLibJsonForTesting()));
+ return DesugaredLibrarySpecificationParser.parseDesugaredLibrarySpecification(
+ StringResource.fromFile(
+ libraryDesugarJavaUtilObjects
+ ? ToolHelper.getDesugarLibJsonForTestingAlternative3()
+ : ToolHelper.getDesugarLibJsonForTesting()),
+ options.dexItemFactory(),
+ options.reporter,
+ libraryCompilation,
+ parameters.getApiLevel().getLevel());
}
private void configurationForProgramCompilation(InternalOptions options) {
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/specification/ConvertExportReadTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/specification/ConvertExportReadTest.java
index a972903..125b4ec 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/specification/ConvertExportReadTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/specification/ConvertExportReadTest.java
@@ -8,10 +8,10 @@
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.StringResource;
-import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.desugar.desugaredlibrary.DesugaredLibraryTestBase;
import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanRewritingFlags;
import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanTopLevelFlags;
import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.MultiAPILevelHumanDesugaredLibrarySpecification;
@@ -31,7 +31,7 @@
import org.junit.runners.Parameterized;
@RunWith(Parameterized.class)
-public class ConvertExportReadTest extends TestBase {
+public class ConvertExportReadTest extends DesugaredLibraryTestBase {
@Parameterized.Parameters(name = "{0}")
public static TestParametersCollection data() {