Support new TimeUnit apis through retargeting instead of wrapping
Change-Id: Ie7ce5be42c4ef1a0082f16bbc1841243efb81967
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs.json b/src/library_desugar/jdk11/desugar_jdk_libs.json
index 5adf5d1..9332de7 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs.json
@@ -6,6 +6,22 @@
"support_all_callbacks_from_library": true,
"common_flags": [
{
+ "api_level_below_or_equal": 32,
+ "rewrite_prefix": {
+ "java.util.concurrent.DesugarTimeUnit": "j$.util.concurrent.DesugarTimeUnit"
+ },
+ "retarget_method": {
+ "java.util.concurrent.TimeUnit java.util.concurrent.TimeUnit#of(java.time.temporal.ChronoUnit)": "java.util.concurrent.DesugarTimeUnit",
+ "java.time.temporal.ChronoUnit java.util.concurrent.TimeUnit#toChronoUnit()": "java.util.concurrent.DesugarTimeUnit",
+ "long java.util.concurrent.TimeUnit#convert(java.time.Duration)": "java.util.concurrent.DesugarTimeUnit"
+ },
+ "amend_library_method": [
+ "public static java.util.concurrent.TimeUnit java.util.concurrent.TimeUnit#of(java.time.temporal.ChronoUnit)",
+ "public java.time.temporal.ChronoUnit java.util.concurrent.TimeUnit#toChronoUnit()",
+ "public long java.util.concurrent.TimeUnit#convert(java.time.Duration)"
+ ]
+ },
+ {
"api_level_below_or_equal": 30,
"rewrite_prefix": {
"java.time.": "j$.time.",
@@ -20,8 +36,7 @@
"java.time.ZonedDateTime java.util.GregorianCalendar#toZonedDateTime()": "java.util.DesugarGregorianCalendar"
},
"wrapper_conversion": [
- "java.time.Clock",
- "java.time.temporal.ChronoUnit"
+ "java.time.Clock"
],
"custom_conversion": {
"java.time.Duration": "java.time.TimeConversions",
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs_nio.json b/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
index 8d31143..5a1d513 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
@@ -10,12 +10,21 @@
"rewrite_prefix": {
"java.net.URLDecoder": "j$.net.URLDecoder",
"java.net.URLEncoder": "j$.net.URLEncoder",
- "java.io.DesugarInputStream": "j$.io.DesugarInputStream"
+ "java.io.DesugarInputStream": "j$.io.DesugarInputStream",
+ "java.util.concurrent.DesugarTimeUnit": "j$.util.concurrent.DesugarTimeUnit"
+ },
+ "retarget_method": {
+ "java.util.concurrent.TimeUnit java.util.concurrent.TimeUnit#of(java.time.temporal.ChronoUnit)": "java.util.concurrent.DesugarTimeUnit",
+ "java.time.temporal.ChronoUnit java.util.concurrent.TimeUnit#toChronoUnit()": "java.util.concurrent.DesugarTimeUnit",
+ "long java.util.concurrent.TimeUnit#convert(java.time.Duration)": "java.util.concurrent.DesugarTimeUnit"
},
"retarget_method_with_emulated_dispatch": {
"long java.io.InputStream#transferTo(java.io.OutputStream)": "java.io.DesugarInputStream"
},
"amend_library_method": [
+ "public static java.util.concurrent.TimeUnit java.util.concurrent.TimeUnit#of(java.time.temporal.ChronoUnit)",
+ "public java.time.temporal.ChronoUnit java.util.concurrent.TimeUnit#toChronoUnit()",
+ "public long java.util.concurrent.TimeUnit#convert(java.time.Duration)",
"public long java.io.InputStream#transferTo(java.io.OutputStream)"
]
},
@@ -34,8 +43,7 @@
"java.time.ZonedDateTime java.util.GregorianCalendar#toZonedDateTime()": "java.util.DesugarGregorianCalendar"
},
"wrapper_conversion": [
- "java.time.Clock",
- "java.time.temporal.ChronoUnit"
+ "java.time.Clock"
],
"custom_conversion": {
"java.time.Duration": "java.time.TimeConversions",
diff --git a/src/test/examplesJava9/timeunit/Example.java b/src/test/examplesJava11/timeunit/Example.java
similarity index 85%
rename from src/test/examplesJava9/timeunit/Example.java
rename to src/test/examplesJava11/timeunit/Example.java
index 09e1d0c..003f8a4 100644
--- a/src/test/examplesJava9/timeunit/Example.java
+++ b/src/test/examplesJava11/timeunit/Example.java
@@ -4,6 +4,7 @@
package timeunit;
+import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.TimeUnit;
@@ -12,5 +13,6 @@
public static void main(String[] args) {
TimeUnit timeUnit = TimeUnit.of(ChronoUnit.NANOS);
System.out.println(timeUnit.toChronoUnit());
+ System.out.println(timeUnit.convert(Duration.ZERO));
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/TimeUnitTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/TimeUnitTest.java
index 54b3bc9..2e2e8fb 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/TimeUnitTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/TimeUnitTest.java
@@ -5,16 +5,17 @@
package com.android.tools.r8.desugar.desugaredlibrary.jdk11;
import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.DEFAULT_SPECIFICATIONS;
-import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.getJdk8Jdk11;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.JDK11;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.JDK11_PATH;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.desugar.desugaredlibrary.DesugaredLibraryTestBase;
import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.StringUtils;
+import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
@@ -31,18 +32,15 @@
private final CompilationSpecification compilationSpecification;
private static final Path INPUT_JAR =
- Paths.get(ToolHelper.EXAMPLES_JAVA9_BUILD_DIR + "timeunit.jar");
- private static final String EXPECTED_OUTPUT = StringUtils.lines("Nanos");
+ Paths.get(ToolHelper.EXAMPLES_JAVA11_JAR_DIR + "timeunit.jar");
+ private static final String EXPECTED_OUTPUT = StringUtils.lines("Nanos", "0");
private static final String MAIN_CLASS = "timeunit.Example";
@Parameters(name = "{0}, spec: {1}, {2}")
public static List<Object[]> data() {
return buildParameters(
- getTestParameters()
- .withDexRuntimesStartingFromIncluding(Version.V13_0_0)
- .withApiLevel(AndroidApiLevel.B)
- .build(),
- getJdk8Jdk11(),
+ getTestParameters().withDexRuntimes().withAllApiLevels().build(),
+ ImmutableList.of(JDK11, JDK11_PATH),
DEFAULT_SPECIFICATIONS);
}