Add JDK 17 to available test runtimes.
Bug: b/174431251
Bug: b/227160049
Bug: b/227161271
Bug: b/227161720
Change-Id: Iff8520df27760cc475069f11921db73ea02764ca
diff --git a/src/test/java/com/android/tools/r8/KotlinTestBase.java b/src/test/java/com/android/tools/r8/KotlinTestBase.java
index 8dd8a44..d4f443a 100644
--- a/src/test/java/com/android/tools/r8/KotlinTestBase.java
+++ b/src/test/java/com/android/tools/r8/KotlinTestBase.java
@@ -51,6 +51,10 @@
this.kotlinParameters = kotlinParameters;
}
+ public static CfRuntime getKotlincHostRuntime(TestRuntime runtime) {
+ return runtime.isCf() ? runtime.asCf() : TestRuntime.getCheckedInJdk9();
+ }
+
protected static List<Path> getKotlinFilesInTestPackage(Package pkg) throws IOException {
String folder = DescriptorUtils.getBinaryNameFromJavaType(pkg.getName());
return Files.walk(Paths.get(ToolHelper.TESTS_DIR, "java", folder))
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/java/com/android/tools/r8/TestBase.java
index f5ddeeb..4daa6a9 100644
--- a/src/test/java/com/android/tools/r8/TestBase.java
+++ b/src/test/java/com/android/tools/r8/TestBase.java
@@ -18,6 +18,7 @@
import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.KotlinCompilerTool.KotlinTargetVersion;
import com.android.tools.r8.TestRuntime.CfRuntime;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.ToolHelper.ArtCommandBuilder;
import com.android.tools.r8.ToolHelper.DexVm;
import com.android.tools.r8.ToolHelper.ProcessResult;
@@ -349,6 +350,10 @@
TemporaryFolder temp,
KotlinCompiler kotlinCompiler,
KotlinTargetVersion kotlinTargetVersion) {
+ // TODO(b/227161720): Kotlinc fails to run on JDK17.
+ if (jdk.isNewerThanOrEqual(CfVm.JDK17)) {
+ jdk = TestRuntime.getCheckedInJdk9();
+ }
return KotlinCompilerTool.create(jdk, temp, kotlinCompiler, kotlinTargetVersion);
}
@@ -359,6 +364,10 @@
public KotlinCompilerTool kotlinc(
CfRuntime jdk, KotlinCompiler kotlinCompiler, KotlinTargetVersion kotlinTargetVersion) {
+ // TODO(b/227161720): Kotlinc fails to run on JDK17.
+ if (jdk.isNewerThanOrEqual(CfVm.JDK17)) {
+ jdk = TestRuntime.getCheckedInJdk9();
+ }
return KotlinCompilerTool.create(jdk, temp, kotlinCompiler, kotlinTargetVersion);
}
diff --git a/src/test/java/com/android/tools/r8/TestRuntime.java b/src/test/java/com/android/tools/r8/TestRuntime.java
index 37f2a5f..336ffd1 100644
--- a/src/test/java/com/android/tools/r8/TestRuntime.java
+++ b/src/test/java/com/android/tools/r8/TestRuntime.java
@@ -58,7 +58,7 @@
}
public static CfVm last() {
- return JDK11;
+ return JDK17;
}
public boolean lessThan(CfVm other) {
@@ -130,14 +130,15 @@
return new CfRuntime(CfVm.JDK11, getCheckedInJdkHome(CfVm.JDK11));
}
- // TODO(b/169692487): Add this to 'getCheckedInCfRuntimes' when we start having support for JDK17.
public static CfRuntime getCheckedInJdk17() {
return new CfRuntime(CfVm.JDK17, getCheckedInJdkHome(CfVm.JDK17));
}
public static List<CfRuntime> getCheckedInCfRuntimes() {
CfRuntime[] jdks =
- new CfRuntime[] {getCheckedInJdk8(), getCheckedInJdk9(), getCheckedInJdk11()};
+ new CfRuntime[] {
+ getCheckedInJdk8(), getCheckedInJdk9(), getCheckedInJdk11(), getCheckedInJdk17(),
+ };
Builder<CfRuntime> builder = ImmutableList.builder();
for (CfRuntime jdk : jdks) {
if (jdk != null) {
diff --git a/src/test/java/com/android/tools/r8/annotations/SourceDebugExtensionTest.java b/src/test/java/com/android/tools/r8/annotations/SourceDebugExtensionTest.java
index 14b6376..814e454 100644
--- a/src/test/java/com/android/tools/r8/annotations/SourceDebugExtensionTest.java
+++ b/src/test/java/com/android/tools/r8/annotations/SourceDebugExtensionTest.java
@@ -12,11 +12,10 @@
import com.android.tools.r8.CompilationMode;
import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.KotlinCompilerTool.KotlinTargetVersion;
+import com.android.tools.r8.KotlinTestBase;
import com.android.tools.r8.KotlinTestParameters;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime;
-import com.android.tools.r8.TestRuntime.CfRuntime;
import com.android.tools.r8.retrace.KotlinInlineFunctionRetraceTest;
import com.android.tools.r8.shaking.ProguardKeepAttributes;
import com.android.tools.r8.utils.codeinspector.AnnotationSubject;
@@ -52,11 +51,13 @@
@Test
public void testR8() throws IOException, CompilationFailedException, ExecutionException {
- CfRuntime cfRuntime =
- parameters.isCfRuntime() ? parameters.getRuntime().asCf() : TestRuntime.getCheckedInJdk9();
KotlinCompiler kotlinc = kotlinTestParameters.getCompiler();
Path kotlinSources =
- kotlinc(cfRuntime, getStaticTemp(), kotlinc, KotlinTargetVersion.JAVA_8)
+ kotlinc(
+ KotlinTestBase.getKotlincHostRuntime(parameters.getRuntime()),
+ getStaticTemp(),
+ kotlinc,
+ KotlinTargetVersion.JAVA_8)
.addSourceFiles(
getFilesInTestFolderRelativeToClass(
KotlinInlineFunctionRetraceTest.class, "kt", ".kt"))
diff --git a/src/test/java/com/android/tools/r8/cf/bootstrap/KotlinCompilerTreeShakingTest.java b/src/test/java/com/android/tools/r8/cf/bootstrap/KotlinCompilerTreeShakingTest.java
index d5e17f4..d7a4cdc 100644
--- a/src/test/java/com/android/tools/r8/cf/bootstrap/KotlinCompilerTreeShakingTest.java
+++ b/src/test/java/com/android/tools/r8/cf/bootstrap/KotlinCompilerTreeShakingTest.java
@@ -8,6 +8,7 @@
import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.KotlinCompilerTool.KotlinTargetVersion;
+import com.android.tools.r8.KotlinTestBase;
import com.android.tools.r8.KotlinTestParameters;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
@@ -58,7 +59,7 @@
// Compile Hello.kt and make sure it works as expected.
Path classPathBefore =
kotlinc(
- parameters.getRuntime().asCf(),
+ KotlinTestBase.getKotlincHostRuntime(parameters.getRuntime()),
kotlinTestParameters.getCompiler(),
kotlinTestParameters.getTargetVersion())
.addSourceFiles(HELLO_KT)
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DefaultMethodOverrideConflictWithLibrary2Test.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DefaultMethodOverrideConflictWithLibrary2Test.java
index e836c76..7d73298 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DefaultMethodOverrideConflictWithLibrary2Test.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DefaultMethodOverrideConflictWithLibrary2Test.java
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.desugar.desugaredlibrary;
-import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -90,12 +89,11 @@
}
private void checkResult(TestRunResult<?> result) {
- if (parameters.isCfRuntime() && parameters.getRuntime().asCf().getVm().equals(CfVm.JDK11)) {
- // TODO(b/145566657): For some reason JDK11 throws AbstractMethodError.
- result.assertFailureWithErrorThatMatches(containsString(AbstractMethodError.class.getName()));
+ if (parameters.isCfRuntime() && parameters.getRuntime().asCf().isNewerThanOrEqual(CfVm.JDK11)) {
+ // TODO(b/145566657): For some reason JDK11+ throws AbstractMethodError.
+ result.assertFailureWithErrorThatThrows(AbstractMethodError.class);
} else {
- result.assertFailureWithErrorThatMatches(
- containsString(IncompatibleClassChangeError.class.getName()));
+ result.assertFailureWithErrorThatThrows(IncompatibleClassChangeError.class);
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/IterableTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/IterableTest.java
index e2cdf17..8fd4cd4 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/IterableTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/IterableTest.java
@@ -8,6 +8,8 @@
import com.android.tools.r8.LibraryDesugaringTestConfiguration;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -91,7 +93,12 @@
.addProgramFiles(jar)
.addRunClasspathFiles(buildDesugaredLibraryClassFile(parameters.getApiLevel()))
.run(parameters.getRuntime(), Main.class)
- .assertSuccessWithOutput(EXPECTED_OUTPUT);
+ .applyIf(
+ // TODO(b/227161271): Figure out the cause and resolution for this issue.
+ parameters.isCfRuntime(CfVm.JDK17)
+ && parameters.getApiLevel().equals(AndroidApiLevel.B),
+ r -> r.assertFailureWithErrorThatThrows(ExceptionInInitializerError.class),
+ r -> r.assertSuccessWithOutput(EXPECTED_OUTPUT));
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/jdk8272564/Jdk8272564Test.java b/src/test/java/com/android/tools/r8/desugar/jdk8272564/Jdk8272564Test.java
index 191cc22..13e021d 100644
--- a/src/test/java/com/android/tools/r8/desugar/jdk8272564/Jdk8272564Test.java
+++ b/src/test/java/com/android/tools/r8/desugar/jdk8272564/Jdk8272564Test.java
@@ -11,7 +11,7 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.TestRuntime;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.examples.jdk18.jdk8272564.Jdk8272564;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.InternalOptions.TestingOptions;
@@ -30,9 +30,8 @@
public static TestParametersCollection data() {
// TODO(b/218293990): Right now the JDK 18 tests are built with -target 17, as our Gradle
// version does not know of -target 18.
- // TODO(b/174431251): This should be replaced with .withCfRuntimes(start = jdk17).
return getTestParameters()
- .withCustomRuntime(TestRuntime.getCheckedInJdk17())
+ .withCfRuntimesStartingFromIncluding(CfVm.JDK17)
.withDexRuntimes()
.withAllApiLevelsAlsoForCf()
.build();
@@ -119,20 +118,24 @@
assertJdk8272564NotFixedCode(inspector, 19, 0);
}
+ private boolean isDefaultCfParameters() {
+ return parameters.isCfRuntime() && parameters.getApiLevel().equals(AndroidApiLevel.B);
+ }
+
@Test
// See https://bugs.openjdk.java.net/browse/JDK-8272564.
public void testJdk8272564Compiler() throws Exception {
- assumeTrue(parameters.isCfRuntime());
+ assumeTrue(isDefaultCfParameters());
// Ensure that the test is running with CF input from fixing JDK-8272564.
assertJdk8272564FixedCode(new CodeInspector(Jdk8272564.jar()));
}
@Test
public void testJvm() throws Exception {
- assumeTrue(parameters.isCfRuntime());
+ assumeTrue(isDefaultCfParameters());
testForJvm()
.addRunClasspathFiles(Jdk8272564.jar())
- .run(TestRuntime.getCheckedInJdk17(), Jdk8272564.Main.typeName())
+ .run(parameters.getRuntime(), Jdk8272564.Main.typeName())
.assertSuccess();
}
@@ -150,6 +153,7 @@
@Test
public void testR8() throws Exception {
+ assumeTrue(parameters.isDexRuntime() || isDefaultCfParameters());
// The R8 lens code rewriter rewrites to the code prior to fixing JDK-8272564.
testForR8(parameters.getBackend())
.addProgramFiles(Jdk8272564.jar())
diff --git a/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordAnnotationTest.java b/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordAnnotationTest.java
index 2446b14..1624c29 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordAnnotationTest.java
@@ -5,11 +5,13 @@
package com.android.tools.r8.desugar.records;
import static com.android.tools.r8.utils.InternalOptions.TestingOptions;
+import static org.junit.Assume.assumeTrue;
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime.CfRuntime;
+import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.StringUtils;
import java.util.List;
import org.junit.Test;
@@ -36,18 +38,21 @@
@Parameterized.Parameters(name = "{0}")
public static List<Object[]> data() {
- // TODO(b/174431251): This should be replaced with .withCfRuntimes(start = jdk16).
return buildParameters(
getTestParameters()
- .withCustomRuntime(CfRuntime.getCheckedInJdk17())
+ .withCfRuntimesStartingFromIncluding(CfVm.JDK17)
.withDexRuntimes()
.withAllApiLevelsAlsoForCf()
.build());
}
+ private boolean isDefaultCfParameters() {
+ return parameters.isCfRuntime() && parameters.getApiLevel().equals(AndroidApiLevel.B);
+ }
+
@Test
public void testD8AndJvm() throws Exception {
- if (parameters.isCfRuntime()) {
+ if (isDefaultCfParameters()) {
testForJvm()
.addProgramClassFileData(PROGRAM_DATA)
.run(parameters.getRuntime(), MAIN_TYPE)
@@ -64,6 +69,7 @@
@Test
public void testR8() throws Exception {
+ assumeTrue(parameters.isDexRuntime() || isDefaultCfParameters());
R8FullTestBuilder builder =
testForR8(parameters.getBackend())
.addProgramClassFileData(PROGRAM_DATA)
diff --git a/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java b/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java
index 7a64c3c..5f1b68f 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java
@@ -9,7 +9,7 @@
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime.CfRuntime;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.utils.StringUtils;
import java.util.List;
import org.junit.Test;
@@ -33,10 +33,9 @@
@Parameterized.Parameters(name = "{0}")
public static List<Object[]> data() {
- // TODO(b/174431251): This should be replaced with .withCfRuntimes(start = jdk17).
return buildParameters(
getTestParameters()
- .withCustomRuntime(CfRuntime.getCheckedInJdk17())
+ .withCfRuntimesStartingFromIncluding(CfVm.JDK17)
.withDexRuntimes()
.withAllApiLevelsAlsoForCf()
.build());
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordInstanceOfTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordInstanceOfTest.java
index 1c32b27..743b2b4 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordInstanceOfTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordInstanceOfTest.java
@@ -7,7 +7,7 @@
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime.CfRuntime;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.utils.InternalOptions.TestingOptions;
import com.android.tools.r8.utils.StringUtils;
import java.util.List;
@@ -31,10 +31,9 @@
@Parameterized.Parameters(name = "{0}")
public static List<Object[]> data() {
- // TODO(b/174431251): This should be replaced with .withCfRuntimes(start = jdk17).
return buildParameters(
getTestParameters()
- .withCustomRuntime(CfRuntime.getCheckedInJdk17())
+ .withCfRuntimesStartingFromIncluding(CfVm.JDK17)
.withDexRuntimes()
.withAllApiLevelsAlsoForCf()
.build());
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomTest.java
index 7207f6d..61ee05b 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomTest.java
@@ -7,7 +7,7 @@
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime.CfRuntime;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.utils.InternalOptions.TestingOptions;
import com.android.tools.r8.utils.StringUtils;
import java.util.List;
@@ -48,10 +48,9 @@
@Parameterized.Parameters(name = "{0}")
public static List<Object[]> data() {
- // TODO(b/174431251): This should be replaced with .withCfRuntimes(start = jdk17).
return buildParameters(
getTestParameters()
- .withCustomRuntime(CfRuntime.getCheckedInJdk17())
+ .withCfRuntimesStartingFromIncluding(CfVm.JDK17)
.withDexRuntimes()
.withAllApiLevelsAlsoForCf()
.build());
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordLibMergeTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordLibMergeTest.java
index 7c32b98..53eff63 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordLibMergeTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordLibMergeTest.java
@@ -7,7 +7,7 @@
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime.CfRuntime;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.utils.InternalOptions.TestingOptions;
import com.android.tools.r8.utils.StringUtils;
import java.nio.file.Path;
@@ -34,10 +34,9 @@
@Parameterized.Parameters(name = "{0}")
public static List<Object[]> data() {
- // TODO(b/174431251): This should be replaced with .withCfRuntimes(start = jdk17).
return buildParameters(
getTestParameters()
- .withCustomRuntime(CfRuntime.getCheckedInJdk17())
+ .withCfRuntimesStartingFromIncluding(CfVm.JDK17)
.withDexRuntimes()
.withAllApiLevelsAlsoForCf()
.build());
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordReflectionTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordReflectionTest.java
index 82891db..7b1096d 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordReflectionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordReflectionTest.java
@@ -6,7 +6,7 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime.CfRuntime;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.utils.InternalOptions.TestingOptions;
import com.android.tools.r8.utils.StringUtils;
import java.util.List;
@@ -40,9 +40,8 @@
@Parameterized.Parameters(name = "{0}")
public static List<Object[]> data() {
- // TODO(b/174431251): This should be replaced with .withCfRuntimes(start = jdk17).
return buildParameters(
- getTestParameters().withCustomRuntime(CfRuntime.getCheckedInJdk17()).build());
+ getTestParameters().withCfRuntimesStartingFromIncluding(CfVm.JDK17).build());
}
@Test
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordWithMembersTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordWithMembersTest.java
index f22f8cd..eb8ef2d 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordWithMembersTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordWithMembersTest.java
@@ -7,7 +7,7 @@
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime.CfRuntime;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.utils.InternalOptions.TestingOptions;
import com.android.tools.r8.utils.StringUtils;
import java.util.List;
@@ -33,10 +33,9 @@
@Parameterized.Parameters(name = "{0}")
public static List<Object[]> data() {
- // TODO(b/174431251): This should be replaced with .withCfRuntimes(start = jdk17).
return buildParameters(
getTestParameters()
- .withCustomRuntime(CfRuntime.getCheckedInJdk17())
+ .withCfRuntimesStartingFromIncluding(CfVm.JDK17)
.withDexRuntimes()
.withAllApiLevelsAlsoForCf()
.build());
diff --git a/src/test/java/com/android/tools/r8/desugar/records/SimpleRecordTest.java b/src/test/java/com/android/tools/r8/desugar/records/SimpleRecordTest.java
index 0a8a585..212098c 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/SimpleRecordTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/SimpleRecordTest.java
@@ -39,10 +39,8 @@
@Parameterized.Parameters(name = "{0}")
public static List<Object[]> data() {
- // TODO(b/174431251): Remove once jdk14 or above is added to default parameters.
return buildParameters(
getTestParameters()
- .withCustomRuntime(CfRuntime.getCheckedInJdk17())
.withAllRuntimes()
.withAllApiLevelsAlsoForCf()
.build());
diff --git a/src/test/java/com/android/tools/r8/desugar/records/UnusedRecordFieldTest.java b/src/test/java/com/android/tools/r8/desugar/records/UnusedRecordFieldTest.java
index 5c520cc..24ae5d7 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/UnusedRecordFieldTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/UnusedRecordFieldTest.java
@@ -9,7 +9,7 @@
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime.CfRuntime;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.utils.StringUtils;
import java.util.List;
import org.junit.Test;
@@ -32,10 +32,9 @@
@Parameterized.Parameters(name = "{0}")
public static List<Object[]> data() {
- // TODO(b/174431251): This should be replaced with .withCfRuntimes(start = jdk16).
return buildParameters(
getTestParameters()
- .withCustomRuntime(CfRuntime.getCheckedInJdk17())
+ .withCfRuntimesStartingFromIncluding(CfVm.JDK17)
.withDexRuntimes()
.withAllApiLevelsAlsoForCf()
.build());
diff --git a/src/test/java/com/android/tools/r8/desugar/records/UnusedRecordMethodTest.java b/src/test/java/com/android/tools/r8/desugar/records/UnusedRecordMethodTest.java
index 4c2ddf5..702cc75 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/UnusedRecordMethodTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/UnusedRecordMethodTest.java
@@ -9,7 +9,7 @@
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime.CfRuntime;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.utils.StringUtils;
import java.util.List;
import org.junit.Test;
@@ -32,10 +32,9 @@
@Parameterized.Parameters(name = "{0}")
public static List<Object[]> data() {
- // TODO(b/174431251): This should be replaced with .withCfRuntimes(start = jdk16).
return buildParameters(
getTestParameters()
- .withCustomRuntime(CfRuntime.getCheckedInJdk17())
+ .withCfRuntimesStartingFromIncluding(CfVm.JDK17)
.withDexRuntimes()
.withAllApiLevelsAlsoForCf()
.build());
diff --git a/src/test/java/com/android/tools/r8/desugar/records/UnusedRecordReflectionTest.java b/src/test/java/com/android/tools/r8/desugar/records/UnusedRecordReflectionTest.java
index 7317cea..0687934 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/UnusedRecordReflectionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/UnusedRecordReflectionTest.java
@@ -9,7 +9,7 @@
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime.CfRuntime;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.utils.StringUtils;
import java.util.List;
import org.junit.Test;
@@ -32,10 +32,9 @@
@Parameterized.Parameters(name = "{0}")
public static List<Object[]> data() {
- // TODO(b/174431251): This should be replaced with .withCfRuntimes(start = jdk16).
return buildParameters(
getTestParameters()
- .withCustomRuntime(CfRuntime.getCheckedInJdk17())
+ .withCfRuntimesStartingFromIncluding(CfVm.JDK17)
.withDexRuntimes()
.withAllApiLevelsAlsoForCf()
.build());
diff --git a/src/test/java/com/android/tools/r8/desugar/sealed/SealedAttributeTest.java b/src/test/java/com/android/tools/r8/desugar/sealed/SealedAttributeTest.java
index 35293b5..3a5ba83 100644
--- a/src/test/java/com/android/tools/r8/desugar/sealed/SealedAttributeTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/sealed/SealedAttributeTest.java
@@ -12,7 +12,7 @@
import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.examples.jdk17.Sealed;
import com.android.tools.r8.utils.AndroidApiLevel;
import java.util.List;
@@ -24,17 +24,18 @@
@RunWith(Parameterized.class)
public class SealedAttributeTest extends TestBase {
+ private final TestParameters parameters;
private final Backend backend;
- @Parameters(name = "{0}")
+ @Parameters(name = "{0}, backend:{1}")
public static List<Object[]> data() {
- // TODO(b/174431251): This should be replaced with .withCfRuntimes(start = jdk17).
return buildParameters(
- getTestParameters().withCustomRuntime(TestRuntime.getCheckedInJdk17()).build(),
+ getTestParameters().withCfRuntimesStartingFromIncluding(CfVm.JDK17).build(),
Backend.values());
}
public SealedAttributeTest(TestParameters parameters, Backend backend) {
+ this.parameters = parameters;
this.backend = backend;
}
@@ -43,7 +44,7 @@
assumeTrue(backend == Backend.CF);
testForJvm()
.addRunClasspathFiles(Sealed.jar())
- .run(TestRuntime.getCheckedInJdk17(), Sealed.Main.typeName())
+ .run(parameters.getRuntime(), Sealed.Main.typeName())
.assertSuccessWithOutputLines("R8 compiler", "D8 compiler");
}
diff --git a/src/test/java/com/android/tools/r8/graph/invokestatic/InvokeStaticOnInterfaceTest.java b/src/test/java/com/android/tools/r8/graph/invokestatic/InvokeStaticOnInterfaceTest.java
index a94f02a..61d3d32 100644
--- a/src/test/java/com/android/tools/r8/graph/invokestatic/InvokeStaticOnInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/graph/invokestatic/InvokeStaticOnInterfaceTest.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.graph.invokestatic;
+import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -48,11 +49,11 @@
.run(parameters.getRuntime(), Main.class);
if (parameters.getRuntime().asCf().isNewerThan(CfVm.JDK8)) {
runResult.assertFailureWithErrorThatMatches(
- containsString(
- "java.lang.IncompatibleClassChangeError: Method "
- + I.class.getTypeName()
- + ".foo()V"
- + " must be InterfaceMethodref constant"));
+ allOf(
+ containsString("java.lang.IncompatibleClassChangeError: Method"),
+ // JVM method formatting changed between jdk11 and jdk17
+ containsString(I.class.getTypeName() + ".foo()"),
+ containsString("must be InterfaceMethodref constant")));
} else {
runResult.assertSuccessWithOutputLines("Hello World!");
}
@@ -85,10 +86,11 @@
.run(parameters.getRuntime(), Main.class);
if (parameters.getRuntime().asCf().isNewerThan(CfVm.JDK8)) {
runResult.assertFailureWithErrorThatMatches(
- containsString(
- "java.lang.IncompatibleClassChangeError: Method"
- + " com.android.tools.r8.graph.invokestatic.InvokeStaticOnInterfaceTest$I.foo()V"
- + " must be InterfaceMethodref constant"));
+ allOf(
+ containsString("java.lang.IncompatibleClassChangeError: Method"),
+ containsString(
+ "com.android.tools.r8.graph.invokestatic.InvokeStaticOnInterfaceTest$I.foo()"),
+ containsString("must be InterfaceMethodref constant")));
} else {
runResult.assertSuccessWithOutputLines("Hello World!");
}
diff --git a/src/test/java/com/android/tools/r8/graph/invokevirtual/InvokeVirtualPrivateBaseWithDefaultDirectInvokeTest.java b/src/test/java/com/android/tools/r8/graph/invokevirtual/InvokeVirtualPrivateBaseWithDefaultDirectInvokeTest.java
index a8a222d..9df5458 100644
--- a/src/test/java/com/android/tools/r8/graph/invokevirtual/InvokeVirtualPrivateBaseWithDefaultDirectInvokeTest.java
+++ b/src/test/java/com/android/tools/r8/graph/invokevirtual/InvokeVirtualPrivateBaseWithDefaultDirectInvokeTest.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.utils.AndroidApiLevel;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -31,9 +32,13 @@
this.parameters = parameters;
}
+ private boolean isDefaultCfParameters() {
+ return parameters.isCfRuntime() && parameters.getApiLevel().equals(AndroidApiLevel.B);
+ }
+
@Test
public void testJvm() throws Exception {
- assumeTrue(parameters.isCfRuntime());
+ assumeTrue(isDefaultCfParameters());
testForJvm()
.addInnerClasses(getClass())
.run(parameters.getRuntime(), Main.class)
@@ -51,6 +56,7 @@
@Test
public void testR8() throws Exception {
+ assumeTrue(parameters.isDexRuntime() || isDefaultCfParameters());
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
@@ -70,7 +76,9 @@
(nonDesugaredCf && parameters.isCfRuntime())
|| parameters.canUseDefaultAndStaticInterfaceMethodsWhenDesugaring();
// JDK 11 allows this incorrect dispatch for some reason.
- if (parameters.isCfRuntime(CfVm.JDK11) && isNotDesugared) {
+ if (parameters.isCfRuntime()
+ && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK11)
+ && isNotDesugared) {
result.assertSuccessWithOutputLines("I::foo");
return;
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/ifs/IfThrowNullPointerExceptionTest.java b/src/test/java/com/android/tools/r8/ir/optimize/ifs/IfThrowNullPointerExceptionTest.java
index d0b977b..53a83d5 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/ifs/IfThrowNullPointerExceptionTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/ifs/IfThrowNullPointerExceptionTest.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.ir.code.BasicBlock;
import com.android.tools.r8.ir.code.IRCode;
import com.android.tools.r8.ir.code.Instruction;
@@ -47,7 +48,7 @@
testForJvm()
.addTestClasspath()
.run(parameters.getRuntime(), TestClass.class)
- .assertSuccessWithOutput(getExpectedStdout());
+ .assertSuccessWithOutput(getExpectedStdout(false));
}
@Test
@@ -60,7 +61,7 @@
.compile()
.inspect(this::inspect)
.run(parameters.getRuntime(), TestClass.class)
- .assertSuccessWithOutput(getExpectedStdout());
+ .assertSuccessWithOutput(getExpectedStdout(false));
}
@Test
@@ -72,7 +73,7 @@
.compile()
.inspect(this::inspect)
.run(parameters.getRuntime(), TestClass.class)
- .assertSuccessWithOutput(getExpectedStdout());
+ .assertSuccessWithOutput(getExpectedStdout(true));
}
private void inspect(CodeInspector inspector) {
@@ -114,7 +115,21 @@
}
}
- private String getExpectedStdout() {
+ private String getExpectedStdout(boolean isR8) {
+ if (parameters.isCfRuntime() && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17)) {
+ // Newer JVMs have added support for printing the expression and local causing the NPE.
+ if (isR8) {
+ return StringUtils.lines(
+ "Caught NPE: Cannot invoke \"Object.getClass()\" because \"<parameter1>\" is null",
+ "Caught NPE: x was null",
+ "Caught NPE: Cannot invoke \"Object.getClass()\" because \"<parameter1>\" is null");
+ } else {
+ return StringUtils.lines(
+ "Caught NPE: null",
+ "Caught NPE: x was null",
+ "Caught NPE: Cannot throw exception because \"null\" is null");
+ }
+ }
if (parameters.isCfRuntime() || isDalvik()) {
return StringUtils.lines("Caught NPE: null", "Caught NPE: x was null", "Caught NPE: null");
}
diff --git a/src/test/java/com/android/tools/r8/java_language/pattern_matching_for_instenceof/PattternMatchingForInstanceOfTest.java b/src/test/java/com/android/tools/r8/java_language/pattern_matching_for_instenceof/PattternMatchingForInstanceOfTest.java
index 95cf5b2..e81d20c 100644
--- a/src/test/java/com/android/tools/r8/java_language/pattern_matching_for_instenceof/PattternMatchingForInstanceOfTest.java
+++ b/src/test/java/com/android/tools/r8/java_language/pattern_matching_for_instenceof/PattternMatchingForInstanceOfTest.java
@@ -7,7 +7,7 @@
import com.android.tools.r8.R8TestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime.CfRuntime;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.examples.jdk17.PatternMatchingForInstanceof;
import com.android.tools.r8.utils.InternalOptions.TestingOptions;
import com.google.common.collect.ImmutableList;
@@ -31,10 +31,9 @@
@Parameters(name = "{0}")
public static List<Object[]> data() {
- // TODO(b/174431251): This should be replaced with .withCfRuntimes(start = jdk17).
return buildParameters(
getTestParameters()
- .withCustomRuntime(CfRuntime.getCheckedInJdk17())
+ .withCfRuntimesStartingFromIncluding(CfVm.JDK17)
.withDexRuntimes()
.withAllApiLevelsAlsoForCf()
.build());
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergerValidationTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergerValidationTest.java
index 35087f5..3d0fa60 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergerValidationTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergerValidationTest.java
@@ -10,8 +10,6 @@
import com.android.tools.r8.KotlinTestBase;
import com.android.tools.r8.KotlinTestParameters;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime;
-import com.android.tools.r8.TestRuntime.CfRuntime;
import com.android.tools.r8.utils.DescriptorUtils;
import java.nio.file.Path;
import java.util.Collection;
@@ -43,9 +41,8 @@
String pkg = getClass().getPackage().getName();
String folder = DescriptorUtils.getBinaryNameFromJavaType(pkg);
- CfRuntime cfRuntime = parameters.getRuntime().asCf();
Path ktClasses =
- kotlinc(cfRuntime, kotlinc, targetVersion)
+ kotlinc(getKotlincHostRuntime(parameters.getRuntime()), kotlinc, targetVersion)
.addSourceFiles(getKotlinFileInTest(folder, "b143165163"))
.compile();
testForR8(parameters.getBackend())
@@ -68,10 +65,8 @@
String pkg = getClass().getPackage().getName();
String folder = DescriptorUtils.getBinaryNameFromJavaType(pkg);
- CfRuntime cfRuntime =
- parameters.isCfRuntime() ? parameters.getRuntime().asCf() : TestRuntime.getCheckedInJdk9();
Path ktClasses =
- kotlinc(cfRuntime, kotlinc, targetVersion)
+ kotlinc(getKotlincHostRuntime(parameters.getRuntime()), kotlinc, targetVersion)
.addSourceFiles(getKotlinFileInTest(folder, "b143165163"))
.compile();
testForR8(parameters.getBackend())
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataPrimitiveTypeRewriteTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataPrimitiveTypeRewriteTest.java
index 39d2473..4cbb2e0 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataPrimitiveTypeRewriteTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataPrimitiveTypeRewriteTest.java
@@ -6,6 +6,7 @@
import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.MIN_SUPPORTED_VERSION;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
+import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -119,9 +120,10 @@
runResult.assertSuccessWithOutputLines(EXPECTED);
} else {
runResult.assertFailureWithErrorThatMatches(
- containsString(
- "java.lang.NoSuchMethodError:"
- + " com.android.tools.r8.kotlin.metadata.primitive_type_rewrite_lib.LibKt.foo()"));
+ allOf(
+ containsString("java.lang.NoSuchMethodError:"),
+ containsString(
+ "com.android.tools.r8.kotlin.metadata.primitive_type_rewrite_lib.LibKt.foo()")));
}
}
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlinePropertyTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlinePropertyTest.java
index 94b410e..c693a41 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlinePropertyTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlinePropertyTest.java
@@ -52,7 +52,7 @@
public void smokeTest() throws Exception {
Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+ kotlinc(getKotlincHostRuntime(parameters.getRuntime()), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/inline_property_app", "main"))
.setOutputPath(temp.newFolder().toPath())
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionAsmTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionAsmTest.java
index da28db3..20403fb 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionAsmTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionAsmTest.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.naming.applymapping.shared.NoMappingDumps.HasMappingDump;
import com.android.tools.r8.naming.applymapping.shared.NoMappingDumps.NoMappingDump;
@@ -158,7 +159,9 @@
private String getMethodSignature(String type, String method) {
if (parameters.isCfRuntime()) {
- return type + "." + method + "()V";
+ return parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17)
+ ? ("void " + type + "." + method + "()")
+ : (type + "." + method + "()V");
}
assert parameters.isDexRuntime();
Version version = parameters.getRuntime().asDex().getVm().getVersion();
diff --git a/src/test/java/com/android/tools/r8/resolution/SingleResolutionWithFailingDispatchTest.java b/src/test/java/com/android/tools/r8/resolution/SingleResolutionWithFailingDispatchTest.java
index a5acf15..df001ed 100644
--- a/src/test/java/com/android/tools/r8/resolution/SingleResolutionWithFailingDispatchTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/SingleResolutionWithFailingDispatchTest.java
@@ -49,7 +49,7 @@
}
private void inspectRunResult(TestRunResult<?> runResult) {
- if (parameters.isCfRuntime(CfVm.JDK11)) {
+ if (parameters.isCfRuntime() && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK11)) {
runResult.assertFailureWithErrorThatThrows(AbstractMethodError.class);
} else {
runResult.assertFailureWithErrorThatThrows(IncompatibleClassChangeError.class);
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessWithIntermediateTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessWithIntermediateTest.java
index 6289967..5638929 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessWithIntermediateTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialMethodAccessWithIntermediateTest.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.resolution.access;
import static com.android.tools.r8.TestRuntime.CfVm.JDK11;
+import static com.android.tools.r8.TestRuntime.CfVm.JDK17;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -186,7 +187,13 @@
.addProgramClasses(getClasses())
.addProgramClassFileData(getTransformedClasses())
.run(parameters.getRuntime(), Main.class)
- .apply(runResult -> checkExpectedResult(runResult, false));
+ .applyIf(
+ // TODO(b/227160049): Incorrect nest-based access allowed on JDK17!?
+ inSameNest
+ && parameters.isCfRuntime()
+ && parameters.asCfRuntime().isNewerThanOrEqual(JDK17),
+ runResult -> runResult.assertSuccessWithOutputLines("A::bar"),
+ runResult -> checkExpectedResult(runResult, false));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestStaticMethodAccessWithIntermediateClassTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestStaticMethodAccessWithIntermediateClassTest.java
index 5b510e5..d68610e 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestStaticMethodAccessWithIntermediateClassTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestStaticMethodAccessWithIntermediateClassTest.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.resolution.access;
import static com.android.tools.r8.TestRuntime.CfVm.JDK11;
+import static com.android.tools.r8.TestRuntime.CfVm.JDK17;
import static org.hamcrest.core.StringContains.containsString;
import static org.junit.Assert.assertEquals;
@@ -82,7 +83,13 @@
.addProgramClasses(getClasses())
.addProgramClassFileData(getTransformedClasses())
.run(parameters.getRuntime(), Main.class)
- .apply(runResult -> checkExpectedResult(runResult, false));
+ .applyIf(
+ // TODO(b/227160049): Incorrect nest-based access allowed on JDK17!?
+ inSameNest
+ && parameters.isCfRuntime()
+ && parameters.asCfRuntime().isNewerThanOrEqual(JDK17),
+ runResult -> runResult.assertSuccessWithOutputLines("A::bar"),
+ runResult -> checkExpectedResult(runResult, false));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestVirtualMethodAccessWithIntermediateClassTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestVirtualMethodAccessWithIntermediateClassTest.java
index 0ef6b99..f2f7dd9 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestVirtualMethodAccessWithIntermediateClassTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestVirtualMethodAccessWithIntermediateClassTest.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.resolution.access;
import static com.android.tools.r8.TestRuntime.CfVm.JDK11;
+import static com.android.tools.r8.TestRuntime.CfVm.JDK17;
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.TestBase;
@@ -81,7 +82,13 @@
.addProgramClasses(getClasses())
.addProgramClassFileData(getTransformedClasses())
.run(parameters.getRuntime(), Main.class)
- .apply(runResult -> checkExpectedResult(runResult, false));
+ .applyIf(
+ // TODO(b/227160049): Incorrect nest-based access allowed on JDK17!?
+ inSameNest
+ && parameters.isCfRuntime()
+ && parameters.asCfRuntime().isNewerThanOrEqual(JDK17),
+ runResult -> runResult.assertSuccessWithOutputLines("A::bar"),
+ runResult -> checkExpectedResult(runResult, false));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/rewrite/JavaScriptScriptEngineTest.java b/src/test/java/com/android/tools/r8/rewrite/JavaScriptScriptEngineTest.java
index a9491f4..5e4932e 100644
--- a/src/test/java/com/android/tools/r8/rewrite/JavaScriptScriptEngineTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/JavaScriptScriptEngineTest.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.utils.StringUtils;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
@@ -56,22 +57,18 @@
testForR8(parameters.getBackend())
.addInnerClasses(JavaScriptScriptEngineTest.class)
.addKeepMainRule(TestClass.class)
+ .setMinApi(parameters.getApiLevel())
.applyIf(
parameters.isDexRuntime(),
- testBuilder ->
- testBuilder.addOptionsModification(
- options ->
- options
- .getOpenClosedInterfacesOptions()
- .suppressAllOpenInterfacesDueToMissingClasses()))
- .setMinApi(parameters.getApiLevel())
- .apply(
- b -> {
- if (parameters.isDexRuntime()) {
- addRhinoForAndroid(b);
- addKeepRulesForAndroidRhino(b);
- b.allowDiagnosticWarningMessages();
- }
+ testBuilder -> {
+ testBuilder.addOptionsModification(
+ options ->
+ options
+ .getOpenClosedInterfacesOptions()
+ .suppressAllOpenInterfacesDueToMissingClasses());
+ addRhinoForAndroid(testBuilder);
+ addKeepRulesForAndroidRhino(testBuilder);
+ testBuilder.allowDiagnosticWarningMessages();
})
.compile()
.applyIf(
@@ -84,8 +81,13 @@
"required for default or static interface methods desugaring"),
equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))))
.run(parameters.getRuntime(), TestClass.class)
- .assertSuccessWithOutput(
- parameters.isCfRuntime() ? EXPECTED_NASHORN_OUTPUT : EXPECTED_RHINO_OUTPUT);
+ .applyIf(
+ // TODO(b/227162584): Fails to find any engine on JDK17.
+ parameters.isCfRuntime(CfVm.JDK17),
+ r -> r.assertFailureWithErrorThatThrows(NullPointerException.class),
+ r ->
+ r.assertSuccessWithOutput(
+ parameters.isCfRuntime() ? EXPECTED_NASHORN_OUTPUT : EXPECTED_RHINO_OUTPUT));
}
static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/rewrite/ScriptEngineTest.java b/src/test/java/com/android/tools/r8/rewrite/ScriptEngineTest.java
index 7bb21a3..bf0084b 100644
--- a/src/test/java/com/android/tools/r8/rewrite/ScriptEngineTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/ScriptEngineTest.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.DataEntryResource;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.StreamUtils;
import com.android.tools.r8.utils.StringUtils;
@@ -103,7 +104,10 @@
// comes with "Oracle Nashorn" included.
.assertSuccessWithOutput(
parameters.isCfRuntime()
- ? StringUtils.lines("MyEngine1", "MyEngine2", "Oracle Nashorn")
+ // TODO(b/227162584): It looks like the JS engine is not in the jdk anymore.
+ ? (parameters.isCfRuntime(CfVm.JDK17)
+ ? StringUtils.lines("MyEngine1", "MyEngine2")
+ : StringUtils.lines("MyEngine1", "MyEngine2", "Oracle Nashorn"))
: StringUtils.lines("Mozilla Rhino", "MyEngine1", "MyEngine2"));
// TODO(b/136633154): On the JVM this should always be there as the service loading is in
diff --git a/tools/test.py b/tools/test.py
index 5b1a914..1e5499f 100755
--- a/tools/test.py
+++ b/tools/test.py
@@ -57,6 +57,7 @@
'jdk8',
'jdk9',
'jdk11',
+ 'jdk17',
] + [ 'dex-%s' % dexvm for dexvm in ALL_ART_VMS ]
def ParseOptions():