Replace static runtime fields by getter functions.
Change-Id: I5a414ba99edafac147156dc961840fd3f0fd649b
diff --git a/src/test/java/com/android/tools/r8/CompileWithJdkClassFileProviderTest.java b/src/test/java/com/android/tools/r8/CompileWithJdkClassFileProviderTest.java
index 1754bff..1defe48 100644
--- a/src/test/java/com/android/tools/r8/CompileWithJdkClassFileProviderTest.java
+++ b/src/test/java/com/android/tools/r8/CompileWithJdkClassFileProviderTest.java
@@ -6,6 +6,7 @@
import static org.junit.Assert.fail;
import static org.junit.Assume.assumeTrue;
+import com.android.tools.r8.TestRuntime.CfRuntime;
import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.utils.AndroidApiLevel;
import java.util.List;
@@ -27,21 +28,21 @@
@Parameters(name = "{0}, library: {1}")
public static List<Object[]> data() {
- return buildParameters(getTestParameters().withAllRuntimes().build(), CfVm.values());
+ return buildParameters(
+ getTestParameters().withAllRuntimes().build(), TestRuntime.getCheckedInCfRuntimes());
}
private final TestParameters parameters;
- private final CfVm library;
+ private final CfRuntime library;
- public CompileWithJdkClassFileProviderTest(TestParameters parameters, CfVm library) {
+ public CompileWithJdkClassFileProviderTest(TestParameters parameters, CfRuntime library) {
this.parameters = parameters;
this.library = library;
}
@Test
public void compileSimpleCodeWithJdkLibrary() throws Exception {
- ClassFileResourceProvider provider =
- JdkClassFileProvider.fromJdkHome(TestRuntime.getCheckedInJDKHome(library));
+ ClassFileResourceProvider provider = JdkClassFileProvider.fromJdkHome(library.getJavaHome());
testForR8(parameters.getBackend())
.addLibraryProvider(provider)
@@ -58,7 +59,7 @@
@Test
public void compileSimpleCodeWithSystemJdk() throws Exception {
// Don't run duplicate tests (library is not used by the test).
- assumeTrue(library == CfVm.JDK8);
+ assumeTrue(library.getVm() == CfVm.JDK8);
ClassFileResourceProvider provider = JdkClassFileProvider.fromSystemJdk();
@@ -76,8 +77,7 @@
@Test
public void compileCodeWithJava9APIUsage() throws Exception {
- ClassFileResourceProvider provider =
- JdkClassFileProvider.fromJdkHome(TestRuntime.getCheckedInJDKHome(library));
+ ClassFileResourceProvider provider = JdkClassFileProvider.fromJdkHome(library.getJavaHome());
TestShrinkerBuilder<?, ?, ?, ?, ?> testBuilder =
testForR8(parameters.getBackend())
@@ -85,7 +85,7 @@
.addProgramClassFileData(dumpClassWhichUseJava9Flow())
.addKeepMainRule("MySubscriber");
- if (library == CfVm.JDK8) {
+ if (library.getVm() == CfVm.JDK8) {
try {
// java.util.concurrent.Flow$Subscriber is not present in JDK8 rt.jar.
testBuilder.compileWithExpectedDiagnostics(
diff --git a/src/test/java/com/android/tools/r8/JavaCompilerTool.java b/src/test/java/com/android/tools/r8/JavaCompilerTool.java
index d527670..c7f7652 100644
--- a/src/test/java/com/android/tools/r8/JavaCompilerTool.java
+++ b/src/test/java/com/android/tools/r8/JavaCompilerTool.java
@@ -7,7 +7,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
-import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.TestRuntime.CfRuntime;
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.ZipUtils;
@@ -23,24 +23,24 @@
public class JavaCompilerTool {
- private final CfVm jdk;
+ private final CfRuntime jdk;
private final TestState state;
private final List<Path> sources = new ArrayList<>();
private final List<Path> classpath = new ArrayList<>();
private final List<String> options = new ArrayList<>();
private Path output = null;
- private JavaCompilerTool(CfVm jdk, TestState state) {
+ private JavaCompilerTool(CfRuntime jdk, TestState state) {
this.jdk = jdk;
this.state = state;
}
- public static JavaCompilerTool create(CfVm jdk, TemporaryFolder temp) {
+ public static JavaCompilerTool create(CfRuntime jdk, TemporaryFolder temp) {
assert temp != null;
return create(jdk, new TestState(temp));
}
- public static JavaCompilerTool create(CfVm jdk, TestState state) {
+ public static JavaCompilerTool create(CfRuntime jdk, TestState state) {
assert state != null;
return new JavaCompilerTool(jdk, state);
}
@@ -106,7 +106,7 @@
private ProcessResult compileInternal(Path output) throws IOException {
Path outdir = Files.isDirectory(output) ? output : state.getNewTempFolder();
List<String> cmdline = new ArrayList<>();
- cmdline.add(ToolHelper.getJavaExecutable(jdk) + "c");
+ cmdline.add(jdk.getJavaExecutable() + "c");
cmdline.addAll(options);
if (!classpath.isEmpty()) {
cmdline.add("-cp");
diff --git a/src/test/java/com/android/tools/r8/JdkClassFileProviderTest.java b/src/test/java/com/android/tools/r8/JdkClassFileProviderTest.java
index d6f38af..fbcc9d6 100644
--- a/src/test/java/com/android/tools/r8/JdkClassFileProviderTest.java
+++ b/src/test/java/com/android/tools/r8/JdkClassFileProviderTest.java
@@ -4,18 +4,40 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
+import com.android.tools.r8.TestRuntime.CfRuntime;
+import com.android.tools.r8.TestRuntime.CfVm;
import com.google.common.io.ByteStreams;
import java.io.IOException;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
import org.objectweb.asm.Opcodes;
+@RunWith(Parameterized.class)
public class JdkClassFileProviderTest extends TestBase implements Opcodes {
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withCfRuntimes().build();
+ }
+
+ final TestParameters parameters;
+
+ public JdkClassFileProviderTest(TestParameters parameters) {
+ this.parameters = parameters;
+ }
+
+ private CfRuntime getRuntime() {
+ return parameters.getRuntime().asCf();
+ }
+
@Test
- public void testInvalid8RuntimeClassPath() throws Exception {
+ public void testInvalidRuntimeClassPath() throws Exception {
Path path = temp.newFolder().toPath();
try {
JdkClassFileProvider.fromJdkHome(path);
@@ -27,22 +49,23 @@
}
@Test
- public void testJdk8JavHome() throws Exception {
+ public void testJdkJavaHome() throws Exception {
ClassFileResourceProvider provider =
- JdkClassFileProvider.fromJdkHome(ToolHelper.getJavaHome(TestRuntime.CfVm.JDK8));
+ JdkClassFileProvider.fromJdkHome(getRuntime().getJavaHome());
assertJavaLangObject(provider);
assert provider instanceof AutoCloseable;
+ if (getRuntime().isNewerThanOrEqual(CfVm.JDK9)) {
+ assertJavaUtilConcurrentFlowSubscriber(provider);
+ }
((AutoCloseable) provider).close();
}
@Test
public void testJdk8RuntimeClassPath() throws Exception {
+ assumeTrue(getRuntime().getVm() == CfVm.JDK8);
ClassFileResourceProvider provider =
JdkClassFileProvider.fromJavaRuntimeJar(
- ToolHelper.getJavaHome(TestRuntime.CfVm.JDK8)
- .resolve("jre")
- .resolve("lib")
- .resolve("rt.jar"));
+ getRuntime().getJavaHome().resolve("jre").resolve("lib").resolve("rt.jar"));
assertJavaLangObject(provider);
assert provider instanceof AutoCloseable;
((AutoCloseable) provider).close();
@@ -50,8 +73,9 @@
@Test
public void testJdk8SystemModules() throws Exception {
+ assumeTrue(getRuntime().getVm() == CfVm.JDK8);
try {
- JdkClassFileProvider.fromSystemModulesJdk(ToolHelper.getJavaHome(TestRuntime.CfVm.JDK8));
+ JdkClassFileProvider.fromSystemModulesJdk(getRuntime().getJavaHome());
fail("Not supposed to succeed");
} catch (NoSuchFileException e) {
assertThat(e.toString(), containsString("lib/jrt-fs.jar"));
@@ -59,39 +83,10 @@
}
@Test
- public void testJdk9JavaHome() throws Exception {
+ public void testJdk9PlusSystemModules() throws Exception {
+ assumeTrue(getRuntime().isNewerThanOrEqual(CfVm.JDK9));
ClassFileResourceProvider provider =
- JdkClassFileProvider.fromJdkHome(ToolHelper.getJavaHome(TestRuntime.CfVm.JDK9));
- assertJavaLangObject(provider);
- assertJavaUtilConcurrentFlowSubscriber(provider);
- assert provider instanceof AutoCloseable;
- ((AutoCloseable) provider).close();
- }
-
- @Test
- public void testJdk9SystemModules() throws Exception {
- ClassFileResourceProvider provider =
- JdkClassFileProvider.fromSystemModulesJdk(ToolHelper.getJavaHome(TestRuntime.CfVm.JDK9));
- assertJavaLangObject(provider);
- assertJavaUtilConcurrentFlowSubscriber(provider);
- assert provider instanceof AutoCloseable;
- ((AutoCloseable) provider).close();
- }
-
- @Test
- public void testJdk11JavaHome() throws Exception {
- ClassFileResourceProvider provider =
- JdkClassFileProvider.fromJdkHome(ToolHelper.getJavaHome(TestRuntime.CfVm.JDK11));
- assertJavaLangObject(provider);
- assertJavaUtilConcurrentFlowSubscriber(provider);
- assert provider instanceof AutoCloseable;
- ((AutoCloseable) provider).close();
- }
-
- @Test
- public void testJdk11SystemModules() throws Exception {
- ClassFileResourceProvider provider =
- JdkClassFileProvider.fromSystemModulesJdk(ToolHelper.getJavaHome(TestRuntime.CfVm.JDK11));
+ JdkClassFileProvider.fromSystemModulesJdk(getRuntime().getJavaHome());
assertJavaLangObject(provider);
assertJavaUtilConcurrentFlowSubscriber(provider);
assert provider instanceof AutoCloseable;
diff --git a/src/test/java/com/android/tools/r8/JvmTestBuilder.java b/src/test/java/com/android/tools/r8/JvmTestBuilder.java
index 4f31cc8..e44287f 100644
--- a/src/test/java/com/android/tools/r8/JvmTestBuilder.java
+++ b/src/test/java/com/android/tools/r8/JvmTestBuilder.java
@@ -48,7 +48,7 @@
throws IOException {
assert runtime.isCf();
ProcessResult result =
- ToolHelper.runJava(runtime.asCf().getVm(), classpath, ObjectArrays.concat(mainClass, args));
+ ToolHelper.runJava(runtime.asCf(), classpath, ObjectArrays.concat(mainClass, args));
return new JvmTestRunResult(builder.build(), runtime, result);
}
diff --git a/src/test/java/com/android/tools/r8/KotlinCompilerTool.java b/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
index e66a3de..4109295 100644
--- a/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
+++ b/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
@@ -94,7 +94,7 @@
private ProcessResult compileInternal(Path output) throws IOException {
Path outdir = Files.isDirectory(output) ? output : state.getNewTempFolder();
List<String> cmdline = new ArrayList<>();
- cmdline.add(ToolHelper.getJavaExecutable(jdk.getVm()));
+ cmdline.add(jdk.getJavaExecutable().toString());
cmdline.add("-jar");
cmdline.add(KT_PRELOADER);
cmdline.add("org.jetbrains.kotlin.preloading.Preloader");
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/java/com/android/tools/r8/TestBase.java
index 9ab7d53..2eb2d42 100644
--- a/src/test/java/com/android/tools/r8/TestBase.java
+++ b/src/test/java/com/android/tools/r8/TestBase.java
@@ -12,7 +12,6 @@
import com.android.tools.r8.ClassFileConsumer.ArchiveConsumer;
import com.android.tools.r8.DataResourceProvider.Visitor;
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;
@@ -176,10 +175,10 @@
}
public JavaCompilerTool javac(CfRuntime jdk) {
- return JavaCompilerTool.create(jdk.getVm(), temp);
+ return JavaCompilerTool.create(jdk, temp);
}
- public static JavaCompilerTool javac(CfVm jdk, TemporaryFolder temp) {
+ public static JavaCompilerTool javac(CfRuntime jdk, TemporaryFolder temp) {
return JavaCompilerTool.create(jdk, temp);
}
diff --git a/src/test/java/com/android/tools/r8/TestCompileResult.java b/src/test/java/com/android/tools/r8/TestCompileResult.java
index 8c643ff..f8e0eb0 100644
--- a/src/test/java/com/android/tools/r8/TestCompileResult.java
+++ b/src/test/java/com/android/tools/r8/TestCompileResult.java
@@ -294,8 +294,7 @@
.addAll(additionalClassPath)
.add(out)
.build();
- ProcessResult result =
- ToolHelper.runJava(runtime.asCf().getVm(), vmArguments, classPath, arguments);
+ ProcessResult result = ToolHelper.runJava(runtime.asCf(), vmArguments, classPath, arguments);
return createRunResult(runtime, result);
}
diff --git a/src/test/java/com/android/tools/r8/TestParametersBuilder.java b/src/test/java/com/android/tools/r8/TestParametersBuilder.java
index ae3e78a..bc0e494 100644
--- a/src/test/java/com/android/tools/r8/TestParametersBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestParametersBuilder.java
@@ -3,14 +3,12 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8;
-import com.android.tools.r8.TestRuntime.CfRuntime;
import com.android.tools.r8.TestRuntime.CfVm;
-import com.android.tools.r8.TestRuntime.DexRuntime;
import com.android.tools.r8.TestRuntime.NoneRuntime;
import com.android.tools.r8.ToolHelper.DexVm;
-import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.utils.AndroidApiLevel;
import java.util.Arrays;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -219,20 +217,8 @@
// Public method to check that the CF runtime coincides with the system runtime.
public static boolean isSystemJdk(CfVm vm) {
- String version = System.getProperty("java.version");
- switch (vm) {
- case JDK8:
- return version.startsWith("1.8.");
- case JDK9:
- return version.startsWith("9.");
- case JDK11:
- return version.startsWith("11.");
- }
- throw new Unreachable();
- }
-
- private static boolean isSupportedJdk(CfVm vm) {
- return isSystemJdk(vm) || TestRuntime.isCheckedInJDK(vm);
+ TestRuntime systemRuntime = TestRuntime.getSystemRuntime();
+ return systemRuntime.isCf() && systemRuntime.asCf().getVm().equals(vm);
}
public static boolean isRuntimesPropertySet() {
@@ -243,30 +229,33 @@
return System.getProperty("runtimes");
}
- private static Stream<TestRuntime> getAvailableRuntimes() {
- Stream<TestRuntime> runtimes;
- if (isRuntimesPropertySet()) {
- runtimes =
- Arrays.stream(getRuntimesProperty().split(":"))
- .filter(s -> !s.isEmpty())
- .map(
- name -> {
- TestRuntime runtime = TestRuntime.fromName(name);
- if (runtime != null) {
- return runtime;
- }
- throw new RuntimeException("Unexpected runtime property name: " + name);
- });
- } else {
- runtimes =
- Stream.concat(
- Stream.of(NoneRuntime.getInstance()),
- Stream.concat(
- Arrays.stream(TestRuntime.CfVm.values()).map(CfRuntime::fromCfVm),
- Arrays.stream(DexVm.Version.values()).map(DexRuntime::new)));
+ private static Stream<TestRuntime> getUnfilteredAvailableRuntimes() {
+ // The runtimes are built in a linked hash map to ensure a deterministic order and avoid
+ // duplicates.
+ LinkedHashMap<TestRuntime, TestRuntime> runtimes = new LinkedHashMap<>();
+ // Place the none-runtime first.
+ NoneRuntime noneRuntime = NoneRuntime.getInstance();
+ runtimes.putIfAbsent(noneRuntime, noneRuntime);
+ // Then the checked in runtimes (CF and DEX).
+ for (TestRuntime checkedInRuntime : TestRuntime.getCheckedInRuntimes()) {
+ runtimes.putIfAbsent(checkedInRuntime, checkedInRuntime);
}
- // TODO(b/127785410) Support multiple VMs at the same time.
- return runtimes.filter(runtime -> !runtime.isCf() || isSupportedJdk(runtime.asCf().getVm()));
+ // Then finally the system runtime. It will likely be the same as a checked in and adding it
+ // makes the overall order more stable.
+ TestRuntime systemRuntime = TestRuntime.getSystemRuntime();
+ runtimes.putIfAbsent(systemRuntime, systemRuntime);
+ return runtimes.values().stream();
+ }
+
+ private static Stream<TestRuntime> getAvailableRuntimes() {
+ if (isRuntimesPropertySet()) {
+ String[] runtimeFilters = getRuntimesProperty().split(":");
+ return getUnfilteredAvailableRuntimes()
+ .filter(
+ runtime ->
+ Arrays.stream(runtimeFilters).anyMatch(filter -> runtime.name().equals(filter)));
+ }
+ return getUnfilteredAvailableRuntimes();
}
public static List<CfVm> getAvailableCfVms() {
diff --git a/src/test/java/com/android/tools/r8/TestRuntime.java b/src/test/java/com/android/tools/r8/TestRuntime.java
index 8177679..db24a6d 100644
--- a/src/test/java/com/android/tools/r8/TestRuntime.java
+++ b/src/test/java/com/android/tools/r8/TestRuntime.java
@@ -6,31 +6,20 @@
import com.android.tools.r8.TestBase.Backend;
import com.android.tools.r8.ToolHelper.DexVm;
+import com.android.tools.r8.errors.Unimplemented;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.utils.AndroidApiLevel;
-import com.google.common.collect.ImmutableMap;
+import com.android.tools.r8.utils.ListUtils;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableList.Builder;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
// Base class for the runtime structure in the test parameters.
-public class TestRuntime {
-
- public static TestRuntime fromName(String name) {
- if (NoneRuntime.NAME.equals(name)) {
- return NoneRuntime.getInstance();
- }
- CfVm cfVm = CfVm.fromName(name);
- if (cfVm != null) {
- return CfRuntime.fromCfVm(cfVm);
- }
- if (name.startsWith("dex-")) {
- DexVm dexVm = DexVm.fromShortName(name.substring(4) + "_host");
- if (dexVm != null) {
- return new DexRuntime(dexVm);
- }
- }
- return null;
- }
+public abstract class TestRuntime {
// Enum describing the possible/supported CF runtimes.
public enum CfVm {
@@ -79,51 +68,99 @@
}
}
- // Values are the path in third_party/openjdk to the repository with bin
- private static ImmutableMap<CfVm, Path> CHECKED_IN_JDKS = initializeCheckedInJDKs();
+ private static final Path JDK8_PATH = Paths.get(ToolHelper.THIRD_PARTY_DIR, "openjdk", "jdk8");
+ private static final Path JDK9_PATH =
+ Paths.get(ToolHelper.THIRD_PARTY_DIR, "openjdk", "openjdk-9.0.4");
+ private static final Path JDK11_PATH = Paths.get(ToolHelper.THIRD_PARTY_DIR, "openjdk", "jdk-11");
- private static ImmutableMap<CfVm, Path> initializeCheckedInJDKs() {
+ public static CfRuntime getCheckedInJdk8() {
+ Path home;
if (ToolHelper.isLinux()) {
- return ImmutableMap.of(
- CfVm.JDK8,
- Paths.get("jdk8", "linux-x86"),
- CfVm.JDK9,
- Paths.get("openjdk-9.0.4", "linux"),
- CfVm.JDK11,
- Paths.get("jdk-11", "Linux"));
+ home = JDK8_PATH.resolve("linux-x86");
+ } else if (ToolHelper.isMac()) {
+ home = JDK8_PATH.resolve("darwin-x86");
+ } else {
+ assert ToolHelper.isWindows();
+ return null;
}
- if (ToolHelper.isMac()) {
- return ImmutableMap.of(
- CfVm.JDK8,
- Paths.get("jdk8", "darwin-x86"),
- CfVm.JDK9,
- Paths.get("openjdk-9.0.4", "osx"),
- CfVm.JDK11,
- Paths.get("jdk-11", "Mac", "Contents", "Home"));
+ return new CfRuntime(CfVm.JDK8, home);
+ }
+
+ public static CfRuntime getCheckedInJdk9() {
+ Path home;
+ if (ToolHelper.isLinux()) {
+ home = JDK9_PATH.resolve("linux");
+ } else if (ToolHelper.isMac()) {
+ home = JDK9_PATH.resolve("osx");
+ } else {
+ assert ToolHelper.isWindows();
+ home = JDK9_PATH.resolve("windows");
}
- assert ToolHelper.isWindows();
- return ImmutableMap.of(
- CfVm.JDK9,
- Paths.get("openjdk-9.0.4", "windows"),
- CfVm.JDK11,
- Paths.get("jdk-11", "Windows"));
+ return new CfRuntime(CfVm.JDK9, home);
}
- static boolean isCheckedInJDK(CfVm jdk) {
- return CHECKED_IN_JDKS.containsKey(jdk);
+ public static CfRuntime getCheckedInJdk11() {
+ Path home;
+ if (ToolHelper.isLinux()) {
+ home = JDK11_PATH.resolve("Linux");
+ } else if (ToolHelper.isMac()) {
+ home = Paths.get(JDK11_PATH.toString(), "Mac", "Contents", "Home");
+ } else {
+ assert ToolHelper.isWindows();
+ home = JDK11_PATH.resolve("Windows");
+ }
+ return new CfRuntime(CfVm.JDK11, home);
}
- static Path getCheckedInJDKHome(CfVm jdk) {
- return Paths.get("third_party", "openjdk").resolve(CHECKED_IN_JDKS.get(jdk));
+ public static List<CfRuntime> getCheckedInCfRuntimes() {
+ CfRuntime[] jdks =
+ new CfRuntime[] {getCheckedInJdk8(), getCheckedInJdk9(), getCheckedInJdk11()};
+ Builder<CfRuntime> builder = ImmutableList.builder();
+ for (CfRuntime jdk : jdks) {
+ if (jdk != null) {
+ builder.add(jdk);
+ }
+ }
+ return builder.build();
}
- static Path getCheckedInJDKPathFor(CfVm jdk) {
- return getCheckedInJDKHome(jdk).resolve(Paths.get("bin", "java"));
+ private static List<DexRuntime> getCheckedInDexRuntimes() {
+ if (ToolHelper.isLinux()) {
+ return ListUtils.map(Arrays.asList(DexVm.Version.values()), DexRuntime::new);
+ }
+ assert ToolHelper.isMac() || ToolHelper.isWindows();
+ return ImmutableList.of();
}
+ // For compatibility with old tests not specifying a Java runtime
+ @Deprecated
public static TestRuntime getDefaultJavaRuntime() {
- // For compatibility with old tests not specifying a Java runtime
- return CfRuntime.fromCfVm(CfVm.JDK9);
+ return getCheckedInJdk9();
+ }
+
+ public static List<TestRuntime> getCheckedInRuntimes() {
+ return ImmutableList.<TestRuntime>builder()
+ .addAll(getCheckedInCfRuntimes())
+ .addAll(getCheckedInDexRuntimes())
+ .build();
+ }
+
+ public static TestRuntime getSystemRuntime() {
+ String version = System.getProperty("java.version");
+ String home = System.getProperty("java.home");
+ if (version == null || version.isEmpty() || home == null || home.isEmpty()) {
+ throw new Unimplemented("Unable to create a system runtime");
+ }
+ if (version.startsWith("1.8.")) {
+ return new CfRuntime(CfVm.JDK8, Paths.get(home));
+ }
+ if (version.startsWith("9.")) {
+ return new CfRuntime(CfVm.JDK9, Paths.get(home));
+ }
+ if (version.startsWith("11.")) {
+ return new CfRuntime(CfVm.JDK11, Paths.get(home));
+ }
+ throw new Unimplemented("No support for JDK version: " + version);
}
public static class NoneRuntime extends TestRuntime {
@@ -138,9 +175,24 @@
}
@Override
+ public String name() {
+ return NAME;
+ }
+
+ @Override
public String toString() {
return NAME;
}
+
+ @Override
+ public boolean equals(Object other) {
+ return this == other;
+ }
+
+ @Override
+ public int hashCode() {
+ return System.identityHashCode(this);
+ }
}
// Wrapper for the DEX runtimes.
@@ -158,6 +210,11 @@
}
@Override
+ public String name() {
+ return "dex-" + vm.getVersion().name();
+ }
+
+ @Override
public boolean isDex() {
return true;
}
@@ -172,6 +229,20 @@
}
@Override
+ public boolean equals(Object other) {
+ if (!(other instanceof DexRuntime)) {
+ return false;
+ }
+ DexRuntime dexRuntime = (DexRuntime) other;
+ return vm == dexRuntime.vm;
+ }
+
+ @Override
+ public int hashCode() {
+ return vm.hashCode();
+ }
+
+ @Override
public String toString() {
return "dex-" + vm.getVersion().toString();
}
@@ -183,58 +254,28 @@
// Wrapper for the CF runtimes.
public static class CfRuntime extends TestRuntime {
- public static final CfRuntime JDK8 = new CfRuntime(CfVm.JDK8);
- public static final CfRuntime JDK9 = new CfRuntime(CfVm.JDK9);
- public static final CfRuntime JDK11 = new CfRuntime(CfVm.JDK11);
-
- private final boolean systemJdk;
private final CfVm vm;
private final Path home;
- private CfRuntime(CfVm vm, Path home, boolean systemJdk) {
- assert vm != null;
- this.systemJdk = systemJdk;
- this.vm = vm;
- this.home = home;
- }
-
public CfRuntime(CfVm vm, Path home) {
- this(vm, home, false);
+ assert vm != null;
+ this.vm = vm;
+ this.home = home.toAbsolutePath();
}
- private CfRuntime(CfVm vm) {
- this(vm, getCheckedInJDKHome(vm), isThisSystemJdk(vm));
+ @Override
+ public String name() {
+ return vm.name();
}
- private static boolean isThisSystemJdk(CfVm vm) {
- String version = System.getProperty("java.version");
- switch (vm) {
- case JDK8:
- return version.startsWith("1.8.");
- case JDK9:
- return version.startsWith("9.");
- case JDK11:
- return version.startsWith("11.");
- }
- throw new Unreachable();
+ public Path getJavaHome() {
+ return home;
}
public Path getJavaExecutable() {
return home.resolve("bin").resolve("java");
}
- public static CfRuntime fromCfVm(CfVm vm) {
- switch (vm) {
- case JDK8:
- return JDK8;
- case JDK9:
- return JDK9;
- case JDK11:
- return JDK11;
- }
- throw new Unreachable();
- }
-
@Override
public boolean isCf() {
return true;
@@ -256,7 +297,24 @@
@Override
public boolean equals(Object obj) {
- return obj instanceof CfRuntime && ((CfRuntime) obj).vm.equals(vm);
+ if (!(obj instanceof CfRuntime)) {
+ return false;
+ }
+ CfRuntime cfRuntime = (CfRuntime) obj;
+ return vm == cfRuntime.vm && home.equals(cfRuntime.home);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(vm, home);
+ }
+
+ public boolean isNewerThan(CfVm version) {
+ return !vm.lessThanOrEqual(version);
+ }
+
+ public boolean isNewerThanOrEqual(CfVm version) {
+ return vm == version || !vm.lessThanOrEqual(version);
}
}
@@ -285,4 +343,12 @@
}
throw new Unreachable("Unexpected runtime without backend: " + this);
}
+
+ @Override
+ public abstract boolean equals(Object other);
+
+ @Override
+ public abstract int hashCode();
+
+ public abstract String name();
}
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 650e9eb..6b224e3 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -11,7 +11,7 @@
import com.android.tools.r8.DeviceRunner.DeviceRunnerConfigurationException;
import com.android.tools.r8.TestBase.Backend;
-import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.TestRuntime.CfRuntime;
import com.android.tools.r8.ToolHelper.DexVm.Kind;
import com.android.tools.r8.dex.ApplicationReader;
import com.android.tools.r8.errors.Unreachable;
@@ -1263,22 +1263,22 @@
public static ProcessResult runJava(List<String> vmArgs, List<Path> classpath, String... args)
throws IOException {
- return runJava(null, vmArgs, classpath, args);
+ return runJava(TestRuntime.getSystemRuntime().asCf(), vmArgs, classpath, args);
}
- public static ProcessResult runJava(CfVm runtime, List<Path> classpath, String... args)
+ public static ProcessResult runJava(CfRuntime runtime, List<Path> classpath, String... args)
throws IOException {
return runJava(runtime, ImmutableList.of(), classpath, args);
}
+ @Deprecated
public static ProcessResult runKotlinc(
- CfVm runtime,
List<Path> classPaths,
Path directoryToCompileInto,
List<String> extraOptions,
Path... filesToCompile)
throws IOException {
- List<String> cmdline = new ArrayList<>(Arrays.asList(getJavaExecutable(runtime)));
+ List<String> cmdline = new ArrayList<>(Arrays.asList(getJavaExecutable()));
cmdline.add("-jar");
cmdline.add(KT_PRELOADER);
cmdline.add("org.jetbrains.kotlin.preloading.Preloader");
@@ -1307,10 +1307,11 @@
}
public static ProcessResult runJava(
- CfVm runtime, List<String> vmArgs, List<Path> classpath, String... args) throws IOException {
+ CfRuntime runtime, List<String> vmArgs, List<Path> classpath, String... args)
+ throws IOException {
String cp =
classpath.stream().map(Path::toString).collect(Collectors.joining(CLASSPATH_SEPARATOR));
- List<String> cmdline = new ArrayList<String>(Arrays.asList(getJavaExecutable(runtime)));
+ List<String> cmdline = new ArrayList<>(Arrays.asList(runtime.getJavaExecutable().toString()));
cmdline.addAll(vmArgs);
cmdline.add("-cp");
cmdline.add(cp);
@@ -1412,27 +1413,13 @@
}
@Deprecated
- // Use getJavaExecutable(CfVm) to specify a JDK version or getSystemJavaExecutable
+ // Use CfRuntime.getJavaExecutable() for a specific JDK or getSystemJavaExecutable
public static String getJavaExecutable() {
return getSystemJavaExecutable();
}
public static String getSystemJavaExecutable() {
- return Paths.get(System.getProperty("java.home"), "bin", "java").toString();
- }
-
- public static String getJavaExecutable(CfVm runtime) {
- if (TestRuntime.isCheckedInJDK(runtime)) {
- return TestRuntime.getCheckedInJDKPathFor(runtime).toString();
- } else {
- // TODO(b/127785410): Always assume a non-null runtime.
- assert runtime == null || TestParametersBuilder.isSystemJdk(runtime);
- return getSystemJavaExecutable();
- }
- }
-
- public static Path getJavaHome(CfVm runtime) {
- return TestRuntime.getCheckedInJDKHome(runtime);
+ return TestRuntime.getSystemRuntime().asCf().getJavaExecutable().toString();
}
public static ProcessResult runArtRaw(ArtCommandBuilder builder) throws IOException {
diff --git a/src/test/java/com/android/tools/r8/cf/BootstrapCurrentEqualityTest.java b/src/test/java/com/android/tools/r8/cf/BootstrapCurrentEqualityTest.java
index 85b74b4..cafb01b 100644
--- a/src/test/java/com/android/tools/r8/cf/BootstrapCurrentEqualityTest.java
+++ b/src/test/java/com/android/tools/r8/cf/BootstrapCurrentEqualityTest.java
@@ -15,7 +15,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.CfRuntime;
+import com.android.tools.r8.TestRuntime;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.utils.FileUtils;
@@ -82,7 +82,7 @@
final Path jar = testFolder.newFolder().toPath().resolve("out.jar");
final Path map = testFolder.newFolder().toPath().resolve("out.map");
if (testExternal) {
- testForExternalR8(newTempFolder(), Backend.CF, CfRuntime.JDK9)
+ testForExternalR8(newTempFolder(), Backend.CF, TestRuntime.getCheckedInJdk9())
.useR8WithRelocatedDeps()
.setMode(mode)
.addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_JAR)
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/APIConversionTestBase.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/APIConversionTestBase.java
index 096f6a5..fc2e028 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/APIConversionTestBase.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/APIConversionTestBase.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.desugar.desugaredlibrary.conversiontests;
+import com.android.tools.r8.TestRuntime;
import com.android.tools.r8.TestRuntime.CfRuntime;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.desugar.desugaredlibrary.CoreLibDesugarTestBase;
@@ -25,7 +26,7 @@
+ " windows",
!ToolHelper.isWindows());
- CfRuntime runtime = CfRuntime.JDK8;
+ CfRuntime runtime = TestRuntime.getCheckedInJdk8();
Path conversionFolder = temp.newFolder("conversions").toPath();
// Compile the stubs to be able to compile the conversions.
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11AtomicTests.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11AtomicTests.java
index db0a09a..d2501e9 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11AtomicTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11AtomicTests.java
@@ -10,7 +10,7 @@
import static org.hamcrest.CoreMatchers.endsWith;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.TestRuntime;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.utils.BooleanUtils;
@@ -65,7 +65,7 @@
public static void compileAtomicClasses() throws Exception {
File atomicClassesDir = new File(ATOMIC_COMPILED_TESTS_FOLDER.toString());
assert atomicClassesDir.exists() || atomicClassesDir.mkdirs();
- javac(CfVm.JDK11, getStaticTemp())
+ javac(TestRuntime.getCheckedInJdk11(), getStaticTemp())
.addClasspathFiles(
Collections.singletonList(Paths.get(JDK_TESTS_BUILD_DIR + "testng-6.10.jar")))
.addSourceFiles(ATOMIC_TESTS_FILES)
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11ConcurrentMapTests.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11ConcurrentMapTests.java
index 71458f0..2d2f865 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11ConcurrentMapTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11ConcurrentMapTests.java
@@ -14,7 +14,7 @@
import com.android.tools.r8.D8TestCompileResult;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.TestRuntime;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.ir.desugar.DesugaredLibraryWrapperSynthesizer;
@@ -77,7 +77,7 @@
public static void compileConcurrentClasses() throws Exception {
File concurrentClassesDir = new File(CONCURRENT_COMPILED_TESTS_FOLDER.toString());
assert concurrentClassesDir.exists() || concurrentClassesDir.mkdirs();
- javac(CfVm.JDK11, getStaticTemp())
+ javac(TestRuntime.getCheckedInJdk11(), getStaticTemp())
.addClasspathFiles(
Collections.singletonList(Paths.get(JDK_TESTS_BUILD_DIR + "testng-6.10.jar")))
.addSourceFiles(getAllFilesWithSuffixInDirectory(CONCURRENT_TESTS_FOLDER, JAVA_EXTENSION))
@@ -95,7 +95,7 @@
Path[] classesToCompile = concurrentHashFilesAndDependencies.toArray(new Path[0]);
File concurrentHashClassesDir = new File(CONCURRENT_HASH_COMPILED_TESTS_FOLDER.toString());
assert concurrentHashClassesDir.exists() || concurrentHashClassesDir.mkdirs();
- javac(CfVm.JDK11, getStaticTemp())
+ javac(TestRuntime.getCheckedInJdk11(), getStaticTemp())
.addClasspathFiles(
Collections.singletonList(Paths.get(JDK_TESTS_BUILD_DIR + "testng-6.10.jar")))
.addSourceFiles(classesToCompile)
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11CoreLibTestBase.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11CoreLibTestBase.java
index 9a0b63b..b3e6156 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11CoreLibTestBase.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11CoreLibTestBase.java
@@ -8,7 +8,7 @@
import static com.android.tools.r8.utils.FileUtils.CLASS_EXTENSION;
import static com.android.tools.r8.utils.FileUtils.JAVA_EXTENSION;
-import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.TestRuntime;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.desugar.desugaredlibrary.CoreLibDesugarTestBase;
import com.android.tools.r8.utils.AndroidApiLevel;
@@ -80,7 +80,7 @@
"java.base=ALL-UNNAMED",
"--patch-module",
"java.base=" + JDK_11_JAVA_BASE_EXTENSION_FILES_DIR);
- javac(CfVm.JDK11, getStaticTemp())
+ javac(TestRuntime.getCheckedInJdk11(), getStaticTemp())
.addOptions(options)
.addClasspathFiles(
Collections.singletonList(Paths.get(JDK_TESTS_BUILD_DIR + "testng-6.10.jar")))
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11MathTests.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11MathTests.java
index 9f64237..69c3558 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11MathTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11MathTests.java
@@ -10,6 +10,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.ToolHelper;
import java.io.File;
@@ -68,14 +69,14 @@
public static void compileMathClasses() throws Exception {
File mathClassesDir = new File(JDK_11_MATH_TESTS_DIR.toString());
assert mathClassesDir.exists() || mathClassesDir.mkdirs();
- javac(CfVm.JDK11, getStaticTemp())
+ javac(TestRuntime.getCheckedInJdk11(), getStaticTemp())
.addSourceFiles(JDK_11_MATH_JAVA_FILES)
.setOutputPath(JDK_11_MATH_TESTS_DIR)
.compile();
File strictMathClassesDir = new File(JDK_11_STRICT_MATH_TESTS_DIR.toString());
assert strictMathClassesDir.exists() || strictMathClassesDir.mkdirs();
- javac(CfVm.JDK11, getStaticTemp())
+ javac(TestRuntime.getCheckedInJdk11(), getStaticTemp())
.addSourceFiles(JDK_11_STRICT_MATH_JAVA_FILES)
.setOutputPath(JDK_11_STRICT_MATH_TESTS_DIR)
.compile();
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11ObjectsTests.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11ObjectsTests.java
index 730ee1b..c8a3e2d 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11ObjectsTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11ObjectsTests.java
@@ -10,6 +10,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.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm;
@@ -55,7 +56,7 @@
public static void compileObjectsClass() throws Exception {
File objectsDir = new File(JDK_11_OBJECTS_TESTS_DIR.toString());
assert objectsDir.exists() || objectsDir.mkdirs();
- javac(CfVm.JDK11, getStaticTemp())
+ javac(TestRuntime.getCheckedInJdk11(), getStaticTemp())
.addSourceFiles(JDK_11_OBJECTS_JAVA_DIR.resolve(BASIC_OBJECTS_TEST + JAVA_EXTENSION))
.setOutputPath(JDK_11_OBJECTS_TESTS_DIR)
.compile();
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11StreamTests.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11StreamTests.java
index 784d320..62e1bf9 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11StreamTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/desugaredlibraryjdktests/Jdk11StreamTests.java
@@ -13,7 +13,7 @@
import com.android.tools.r8.D8TestCompileResult;
import com.android.tools.r8.D8TestRunResult;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.TestRuntime;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.utils.AndroidApiLevel;
@@ -172,7 +172,7 @@
"java.base=ALL-UNNAMED",
"--patch-module",
"java.base=" + JDK_11_JAVA_BASE_EXTENSION_CLASSES_DIR);
- javac(CfVm.JDK11, getStaticTemp())
+ javac(TestRuntime.getCheckedInJdk11(), getStaticTemp())
.addOptions(options)
.addClasspathFiles(
Collections.singletonList(Paths.get(JDK_TESTS_BUILD_DIR + "testng-6.10.jar")))
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/r8ondex/HelloWorldCompiledOnArtTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/r8ondex/HelloWorldCompiledOnArtTest.java
index 86a4edb..819e6ce 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/r8ondex/HelloWorldCompiledOnArtTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/r8ondex/HelloWorldCompiledOnArtTest.java
@@ -16,7 +16,7 @@
import com.android.tools.r8.TestDiagnosticMessages;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.TestRuntime;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.ToolHelper.ProcessResult;
@@ -43,7 +43,7 @@
public static void compilePathBackport() throws Exception {
assumeTrue("JDK8 is not checked-in on Windows", !ToolHelper.isWindows());
pathMock = getStaticTemp().newFolder("PathMock").toPath();
- javac(CfVm.JDK8, getStaticTemp())
+ javac(TestRuntime.getCheckedInJdk8(), getStaticTemp())
.setOutputPath(pathMock)
.addSourceFiles(
getAllFilesWithSuffixInDirectory(Paths.get("src/test/r8OnArtBackport"), "java"))
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/r8ondex/R8CompiledThroughDexTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/r8ondex/R8CompiledThroughDexTest.java
index 882c545..148f165 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/r8ondex/R8CompiledThroughDexTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/r8ondex/R8CompiledThroughDexTest.java
@@ -10,7 +10,7 @@
import com.android.tools.r8.R8;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.TestRuntime;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.ToolHelper.ProcessResult;
@@ -72,7 +72,7 @@
Path ouputThroughCf = ouputFolder.toPath().resolve("outThroughCf.zip").toAbsolutePath();
ProcessResult javaProcessResult =
ToolHelper.runJava(
- CfVm.JDK9,
+ TestRuntime.getCheckedInJdk9(),
Collections.singletonList(ToolHelper.R8_WITH_RELOCATED_DEPS_JAR),
"-Xmx512m",
R8.class.getTypeName(),
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
index 1730e78..8af167c 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
@@ -12,7 +12,6 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.TestRuntime;
-import com.android.tools.r8.TestRuntime.CfRuntime;
import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.cf.BootstrapCurrentEqualityTest;
@@ -98,9 +97,10 @@
String prevRunResult = null;
for (Path jar : jarsToCompare()) {
// All jars except ToolHelper.R8_WITH_RELOCATED_DEPS_JAR are compiled for JDK11.
- TestRuntime runtime = jar == ToolHelper.R8_WITH_RELOCATED_DEPS_JAR
- ? parameters.getRuntime()
- : CfRuntime.JDK11;
+ TestRuntime runtime =
+ jar == ToolHelper.R8_WITH_RELOCATED_DEPS_JAR
+ ? parameters.getRuntime()
+ : TestRuntime.getCheckedInJdk11();
Path generatedJar =
testForExternalR8(Backend.CF, runtime)
.useProvidedR8(jar)
@@ -110,9 +110,7 @@
.outputJar();
String runResult =
ToolHelper.runJava(
- parameters.getRuntime().asCf().getVm(),
- ImmutableList.of(generatedJar),
- "hello.Hello")
+ parameters.getRuntime().asCf(), ImmutableList.of(generatedJar), "hello.Hello")
.toString();
if (prevRunResult != null) {
assertEquals(prevRunResult, runResult);
diff --git a/src/test/java/com/android/tools/r8/ir/desugar/backports/GenerateBackportMethods.java b/src/test/java/com/android/tools/r8/ir/desugar/backports/GenerateBackportMethods.java
index e210196..25c4a53 100644
--- a/src/test/java/com/android/tools/r8/ir/desugar/backports/GenerateBackportMethods.java
+++ b/src/test/java/com/android/tools/r8/ir/desugar/backports/GenerateBackportMethods.java
@@ -40,7 +40,6 @@
@RunWith(Parameterized.class)
public class GenerateBackportMethods extends TestBase {
- static final Path javaExecutable = Paths.get(ToolHelper.getJavaExecutable(CfVm.JDK9));
static final Path googleFormatDir = Paths.get(ToolHelper.THIRD_PARTY_DIR, "google-java-format");
static final Path googleFormatJar =
googleFormatDir.resolve("google-java-format-1.7-all-deps.jar");
@@ -90,7 +89,7 @@
@Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withNoneRuntime().build();
+ return getTestParameters().withCfRuntime(CfVm.JDK9).build();
}
public GenerateBackportMethods(TestParameters parameters) {
@@ -104,15 +103,18 @@
assertEquals("Classes should be listed in sorted order", sorted, methodTemplateClasses);
assertEquals(
FileUtils.readTextFile(backportMethodsFile, StandardCharsets.UTF_8),
- generateBackportMethods());
+ generateBackportMethods(parameters.getRuntime().asCf().getJavaExecutable().toString()));
}
// Running this method will regenerate / overwrite the content of the backport methods.
public static void main(String[] args) throws Exception {
- FileUtils.writeToFile(backportMethodsFile, null, generateBackportMethods().getBytes());
+ FileUtils.writeToFile(
+ backportMethodsFile,
+ null,
+ generateBackportMethods(ToolHelper.getSystemJavaExecutable()).getBytes());
}
- private static String generateBackportMethods() throws IOException {
+ private static String generateBackportMethods(String javaExecutable) throws IOException {
InternalOptions options = new InternalOptions();
CfCodePrinter codePrinter = new CfCodePrinter();
JarClassFileReader reader =
@@ -146,7 +148,7 @@
ProcessBuilder builder =
new ProcessBuilder(
ImmutableList.of(
- javaExecutable.toString(),
+ javaExecutable,
"-jar",
googleFormatJar.toString(),
outfile.toAbsolutePath().toString()));
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRenameTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRenameTest.java
index 8b04b16..c7ba86e 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRenameTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRenameTest.java
@@ -57,7 +57,6 @@
ProcessResult processResult =
ToolHelper.runKotlinc(
null,
- null,
supertypeLibJar,
null,
getKotlinFileInTest(supertypeLibFolder, "impl"),
@@ -70,7 +69,6 @@
processResult =
ToolHelper.runKotlinc(
null,
- null,
extLibJar,
null,
getKotlinFileInTest(extLibFolder, "B")
diff --git a/src/test/java/com/android/tools/r8/naming/InterfaceConstructorRenamingTest.java b/src/test/java/com/android/tools/r8/naming/InterfaceConstructorRenamingTest.java
index b2ed534..ebd7420 100644
--- a/src/test/java/com/android/tools/r8/naming/InterfaceConstructorRenamingTest.java
+++ b/src/test/java/com/android/tools/r8/naming/InterfaceConstructorRenamingTest.java
@@ -26,7 +26,6 @@
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.BeforeParam;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
@@ -44,11 +43,6 @@
@ClassRule public static TemporaryFolder staticTemp = ToolHelper.getTemporaryFolderForTest();
- @BeforeParam
- public static void forceCompilation(TestParameters parameters) {
- compilation.apply(parameters.getBackend());
- }
-
private static R8TestCompileResult compile(Backend backend)
throws com.android.tools.r8.CompilationFailedException, IOException, ExecutionException {
R8TestCompileResult compileResult =
@@ -86,7 +80,7 @@
@Test
public void test() throws Throwable {
- compile(parameters.getBackend())
+ compilation.apply(parameters.getBackend())
.run(parameters.getRuntime(), TestClass.class)
.assertSuccessWithOutput(EXPECTED);
}
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingAfterVerticalMergingMethodTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingAfterVerticalMergingMethodTest.java
index 98780e9..7fa0543 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingAfterVerticalMergingMethodTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingAfterVerticalMergingMethodTest.java
@@ -31,7 +31,6 @@
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.BeforeParam;
@RunWith(Parameterized.class)
public class ApplyMappingAfterVerticalMergingMethodTest extends TestBase {
@@ -100,11 +99,6 @@
@ClassRule
public static TemporaryFolder staticTemp = ToolHelper.getTemporaryFolderForTest();
- @BeforeParam
- public static void forceCompilation(TestParameters parameters) {
- compilationResults.apply(parameters.getBackend());
- }
-
public static CompilationResult compile(Backend backend)
throws ExecutionException, CompilationFailedException, IOException {
R8TestCompileResult library = compileLibrary(backend);
diff --git a/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java b/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
index ab80fe5..298134a 100644
--- a/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
@@ -32,7 +32,6 @@
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.BeforeParam;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
@@ -179,11 +178,6 @@
@ClassRule public static TemporaryFolder staticTemp = ToolHelper.getTemporaryFolderForTest();
- @BeforeParam
- public static void forceCompilation(TestParameters parameters) {
- compilationResults.apply(parameters.getBackend());
- }
-
private static Function<Backend, CompilationResults> compilationResults =
memoizeFunction(RemoveAssertionsTest::compileAll);
diff --git a/src/test/java/com/android/tools/r8/shaking/NonVirtualOverrideTest.java b/src/test/java/com/android/tools/r8/shaking/NonVirtualOverrideTest.java
index 287b736..5220c01 100644
--- a/src/test/java/com/android/tools/r8/shaking/NonVirtualOverrideTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/NonVirtualOverrideTest.java
@@ -35,7 +35,6 @@
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.BeforeParam;
@RunWith(Parameterized.class)
public class NonVirtualOverrideTest extends TestBase {
@@ -91,14 +90,6 @@
@ClassRule public static TemporaryFolder staticTemp = ToolHelper.getTemporaryFolderForTest();
- @BeforeParam
- public static void forceCompilation(
- TestParameters parameters, boolean enableClassInlining, boolean enableVerticalClassMerging) {
- expectedResults.apply(isDexVmBetween5_1_1and7_0_0(parameters));
- compilationResults.apply(
- new Dimensions(parameters.getBackend(), enableClassInlining, enableVerticalClassMerging));
- }
-
private static Function<Boolean, String> expectedResults =
memoizeFunction(NonVirtualOverrideTest::getExpectedResult);