Compile R8 main source set with source/target 11.
Bug: b/229695990
Change-Id: Ie9fbc266aa190bb2fe5042030e9917230a9e6d1e
diff --git a/build.gradle b/build.gradle
index db4592a..812b438 100644
--- a/build.gradle
+++ b/build.gradle
@@ -646,6 +646,12 @@
}
setJdkCompilationWithCompatibility(
+ sourceSets.main.compileJavaTaskName,
+ 'jdk-11',
+ JavaVersion.VERSION_11,
+ false);
+
+setJdkCompilationWithCompatibility(
sourceSets.examplesJava9.compileJavaTaskName,
'openjdk-9.0.4',
JavaVersion.VERSION_1_9,
@@ -1037,7 +1043,7 @@
input,
"--output", output,
"--pg-map-output", output + ".map",
- "--lib", "third_party/openjdk/openjdk-rt-1.8/rt.jar"
+ "--lib", org.gradle.internal.jvm.Jvm.current().javaHome,
] + args + libs.collectMany { ["--lib", it] } + pgConfs.collectMany { ["--pg-conf", it] }
return baseR8CommandLine(allArgs)
}
diff --git a/src/main/java/com/android/tools/r8/utils/StringUtils.java b/src/main/java/com/android/tools/r8/utils/StringUtils.java
index f1e4e18..84dd752 100644
--- a/src/main/java/com/android/tools/r8/utils/StringUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/StringUtils.java
@@ -320,19 +320,7 @@
}
public static String trim(String s) {
- int beginIndex = 0;
- int endIndex = s.length();
- while (beginIndex < endIndex && isWhitespace(s.charAt(beginIndex))) {
- beginIndex++;
- }
- while (endIndex - 1 > beginIndex && isWhitespace(s.charAt(endIndex - 1))) {
- endIndex--;
- }
- if (beginIndex > 0 || endIndex < s.length()) {
- return s.substring(beginIndex, endIndex);
- } else {
- return s;
- }
+ return stripLeadingBOM(s).strip();
}
/** Returns true if {@param s} only contains the characters [0-9]. */
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/java/com/android/tools/r8/TestBase.java
index a575af1..93f6288 100644
--- a/src/test/java/com/android/tools/r8/TestBase.java
+++ b/src/test/java/com/android/tools/r8/TestBase.java
@@ -46,7 +46,6 @@
import com.android.tools.r8.jasmin.JasminBuilder;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.origin.PathOrigin;
-import com.android.tools.r8.profile.art.ArtProfileCollection;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.FieldReference;
import com.android.tools.r8.references.MethodReference;
@@ -174,6 +173,11 @@
return ExternalR8TestBuilder.create(new TestState(temp), backend, runtime);
}
+ public static ExternalR8TestBuilder testForExternalR8(TemporaryFolder temp, Backend backend) {
+ return ExternalR8TestBuilder.create(
+ new TestState(temp), backend, TestRuntime.getSystemRuntime());
+ }
+
public static D8TestBuilder testForD8(TemporaryFolder temp, Backend backend) {
return D8TestBuilder.create(new TestState(temp), backend);
}
@@ -214,6 +218,10 @@
return testForExternalR8(temp, backend, runtime);
}
+ public ExternalR8TestBuilder testForExternalR8(Backend backend) {
+ return testForExternalR8(temp, backend, TestRuntime.getSystemRuntime());
+ }
+
public D8TestBuilder testForD8() {
return testForD8(temp, Backend.DEX);
}
diff --git a/src/test/java/com/android/tools/r8/TestCompilerBuilder.java b/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
index 165cd83..cd6df4f 100644
--- a/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
@@ -10,7 +10,6 @@
import com.android.tools.r8.TestBase.Backend;
import com.android.tools.r8.benchmarks.BenchmarkResults;
-import com.android.tools.r8.debug.DebugTestConfig;
import com.android.tools.r8.optimize.argumentpropagation.ArgumentPropagatorEventConsumer;
import com.android.tools.r8.optimize.argumentpropagation.codescanner.MethodStateCollectionByReference;
import com.android.tools.r8.testing.AndroidBuildVersion;
@@ -32,6 +31,7 @@
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.Set;
@@ -226,6 +226,18 @@
return internalCompileAndBenchmark(null);
}
+ private Collection<Path> getDefaultLibraryFiles() {
+ if (backend == Backend.DEX) {
+ assert builder.isMinApiLevelSet();
+ return Collections.singletonList(
+ ToolHelper.getFirstSupportedAndroidJar(
+ AndroidApiLevel.getAndroidApiLevel(builder.getMinApiLevel())));
+ } else {
+ assert backend == Backend.CF;
+ return Collections.singletonList(ToolHelper.getJava8RuntimeJar());
+ }
+ }
+
private CR internalCompileAndBenchmark(BenchmarkResults benchmark)
throws CompilationFailedException {
AndroidAppConsumers sink = new AndroidAppConsumers();
@@ -249,14 +261,7 @@
}
builder.setOptimizeMultidexForLinearAlloc(optimizeMultidexForLinearAlloc);
if (useDefaultRuntimeLibrary) {
- if (backend == Backend.DEX) {
- assert builder.isMinApiLevelSet();
- builder.addLibraryFiles(
- ToolHelper.getFirstSupportedAndroidJar(
- AndroidApiLevel.getAndroidApiLevel(builder.getMinApiLevel())));
- } else {
- builder.addLibraryFiles(TestBase.runtimeJar(backend));
- }
+ builder.addLibraryFiles(getDefaultLibraryFiles());
}
assertNull(oldStdout);
oldStdout = System.out;
diff --git a/src/test/java/com/android/tools/r8/TestRuntime.java b/src/test/java/com/android/tools/r8/TestRuntime.java
index 3524d63..0d937dd 100644
--- a/src/test/java/com/android/tools/r8/TestRuntime.java
+++ b/src/test/java/com/android/tools/r8/TestRuntime.java
@@ -10,6 +10,7 @@
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.ListUtils;
+import com.android.tools.r8.utils.structural.Ordered;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.ImmutableMap;
@@ -28,7 +29,7 @@
public abstract class TestRuntime {
// Enum describing the possible/supported CF runtimes.
- public enum CfVm {
+ public enum CfVm implements Ordered<CfVm> {
JDK8("jdk8", 52),
JDK9("jdk9", 53),
JDK10("jdk10", 54),
@@ -66,17 +67,21 @@
}
public boolean lessThan(CfVm other) {
- return this.ordinal() < other.ordinal();
+ return isLessThan(other);
}
public boolean lessThanOrEqual(CfVm other) {
- return this.ordinal() <= other.ordinal();
+ return isLessThanOrEqualTo(other);
}
@Override
public String toString() {
return name;
}
+
+ public static CfVm getMinimumSystemVersion() {
+ return JDK11;
+ }
}
private static final Path JDK8_PATH = Paths.get(ToolHelper.THIRD_PARTY_DIR, "openjdk", "jdk8");
diff --git a/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java b/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java
index b26a1cf..f41ac28 100644
--- a/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java
+++ b/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java
@@ -14,10 +14,12 @@
import com.android.tools.r8.CompilationMode;
import com.android.tools.r8.ExternalR8TestCompileResult;
+import com.android.tools.r8.JdkClassFileProvider;
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.ProcessResult;
import com.android.tools.r8.retrace.ProguardMapProducer;
@@ -56,6 +58,7 @@
"}",
"-allowaccessmodification"
};
+ private static String HELLO_EXPECTED = StringUtils.lines("Hello, world");
private static Pair<Path, Path> r8R8Debug;
private static Pair<Path, Path> r8R8Release;
@@ -75,7 +78,9 @@
@Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withCfRuntimes().build();
+ return getTestParameters()
+ .withCfRuntimesStartingFromIncluding(CfVm.getMinimumSystemVersion())
+ .build();
}
public BootstrapCurrentEqualityTest(TestParameters parameters) {
@@ -87,10 +92,11 @@
final Path jar = testFolder.newFolder().toPath().resolve("out.jar");
final Path map = testFolder.newFolder().toPath().resolve("out.map");
if (testExternal) {
- testForExternalR8(newTempFolder(), Backend.CF, TestRuntime.getCheckedInJdk9())
+ testForExternalR8(newTempFolder(), Backend.CF)
.useR8WithRelocatedDeps()
.setMode(mode)
.addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_JAR)
+ .addLibraryFiles(TestRuntime.getSystemRuntime().getJavaHome())
.addKeepRuleFiles(MAIN_KEEP)
.compile()
.apply(c -> FileUtils.writeTextFile(map, c.getProguardMap()))
@@ -99,6 +105,7 @@
testForR8(newTempFolder(), Backend.CF)
.setMode(mode)
.addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_JAR)
+ .addLibraryProvider(JdkClassFileProvider.fromSystemJdk())
.addKeepRuleFiles(MAIN_KEEP)
.compile()
.apply(c -> FileUtils.writeTextFile(map, c.getProguardMap()))
@@ -167,6 +174,7 @@
testForExternalR8(parameters.getBackend(), parameters.getRuntime())
.useProvidedR8(ToolHelper.R8LIB_JAR)
.addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_JAR)
+ .addLibraryFiles(parameters.asCfRuntime().getJavaHome())
.addKeepRuleFiles(MAIN_KEEP)
.setMode(CompilationMode.RELEASE)
.compile()
@@ -176,6 +184,7 @@
.useProvidedR8(ToolHelper.R8LIB_EXCLUDE_DEPS_JAR)
.addR8ExternalDepsToClasspath()
.addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_JAR)
+ .addLibraryFiles(parameters.asCfRuntime().getJavaHome())
.addKeepRuleFiles(MAIN_KEEP)
.setMode(CompilationMode.RELEASE)
.compile()
@@ -190,13 +199,15 @@
@Test
public void test() throws Exception {
- Path helloJar = Paths.get(ToolHelper.EXAMPLES_BUILD_DIR, "hello" + JAR_EXTENSION);
- ProcessResult runResult = ToolHelper.runJava(helloJar, "hello.Hello");
- assertEquals(0, runResult.exitCode);
- compareR8(helloJar, runResult, KEEP_HELLO, "hello.Hello");
+ Path program = Paths.get(ToolHelper.EXAMPLES_BUILD_DIR, "hello" + JAR_EXTENSION);
+ testForJvm()
+ .addProgramFiles(program)
+ .run(parameters.getRuntime(), HELLO_NAME)
+ .assertSuccessWithOutput(HELLO_EXPECTED)
+ .apply(r -> compareR8(program, HELLO_EXPECTED, KEEP_HELLO, HELLO_NAME));
}
- private void compareR8(Path program, ProcessResult runResult, String[] keep, String... args)
+ private void compareR8(Path program, String expectedOutput, String[] keep, String main)
throws Exception {
ExternalR8TestCompileResult runR8Debug =
testForExternalR8(newTempFolder(), parameters.getBackend(), parameters.getRuntime())
@@ -205,7 +216,10 @@
.addKeepRules(keep)
.setMode(CompilationMode.DEBUG)
.compile();
- assertEquals(runResult.toString(), ToolHelper.runJava(runR8Debug.outputJar(), args).toString());
+ testForJvm()
+ .addProgramFiles(runR8Debug.outputJar())
+ .run(parameters.getRuntime(), main)
+ .assertSuccessWithOutput(expectedOutput);
ExternalR8TestCompileResult runR8Release =
testForExternalR8(newTempFolder(), parameters.getBackend(), parameters.getRuntime())
.useR8WithRelocatedDeps()
@@ -213,8 +227,10 @@
.addKeepRules(keep)
.setMode(CompilationMode.RELEASE)
.compile();
- assertEquals(
- runResult.toString(), ToolHelper.runJava(runR8Release.outputJar(), args).toString());
+ testForJvm()
+ .addProgramFiles(runR8Release.outputJar())
+ .run(parameters.getRuntime(), main)
+ .assertSuccessWithOutput(expectedOutput);
RunR8AndCheck(r8R8Debug, program, runR8Debug, keep, CompilationMode.DEBUG);
RunR8AndCheck(r8R8Debug, program, runR8Release, keep, CompilationMode.RELEASE);
RunR8AndCheck(r8R8Release, program, runR8Debug, keep, CompilationMode.DEBUG);
diff --git a/src/test/java/com/android/tools/r8/naming/b173184123/ClassExtendsInterfaceNamingTest.java b/src/test/java/com/android/tools/r8/naming/b173184123/ClassExtendsInterfaceNamingTest.java
index 470b542..2de209b 100644
--- a/src/test/java/com/android/tools/r8/naming/b173184123/ClassExtendsInterfaceNamingTest.java
+++ b/src/test/java/com/android/tools/r8/naming/b173184123/ClassExtendsInterfaceNamingTest.java
@@ -11,7 +11,6 @@
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.ToolHelper;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.ZipUtils.ZipBuilder;
@@ -50,9 +49,7 @@
.setSuper(DescriptorUtils.javaTypeToDescriptor(Interface.class.getTypeName()))
.transform())
.build();
- testForExternalR8(
- parameters.getBackend(),
- parameters.isCfRuntime() ? parameters.getRuntime() : TestRuntime.getCheckedInJdk11())
+ testForExternalR8(parameters.getBackend())
.addProgramFiles(classFiles)
.addTestingAnnotationsAsProgramClasses()
.enableAssertions(false)
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java b/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
index 3c4c536..37ac4f0 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
@@ -11,6 +11,7 @@
import static org.objectweb.asm.Opcodes.INVOKESTATIC;
import com.android.tools.r8.CompilationMode;
+import com.android.tools.r8.JdkClassFileProvider;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -244,6 +245,7 @@
testForR8(Backend.CF)
.setMode(CompilationMode.RELEASE)
.addProgramFiles(r8Input)
+ .addLibraryProvider(JdkClassFileProvider.fromSystemJdk())
.addKeepRuleFiles(MAIN_KEEP)
// TODO(b/241763080): Remove when stable version is default.
.enableExperimentalMapFileVersion()
@@ -262,6 +264,7 @@
testForD8(Backend.CF)
.setMode(CompilationMode.RELEASE)
.addProgramFiles(r8Input)
+ .addLibraryProvider(JdkClassFileProvider.fromSystemJdk())
.enableExperimentalMapFileVersion()
// TODO(b/241763080): Enable CF PC test mapping for this compilation.
.addOptionsModification(
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
index 431709c..e4f657f 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
@@ -100,7 +100,7 @@
@Parameters(name = "{0}, external: {1}, verbose: {2}, stream: {3}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(),
+ getTestParameters().withSystemRuntime().build(),
BooleanUtils.values(),
BooleanUtils.values(),
BooleanUtils.values());
diff --git a/src/test/java/com/android/tools/r8/shaking/PrintConfigurationTest.java b/src/test/java/com/android/tools/r8/shaking/PrintConfigurationTest.java
index 3fc3434..9dd9eb6 100644
--- a/src/test/java/com/android/tools/r8/shaking/PrintConfigurationTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/PrintConfigurationTest.java
@@ -8,9 +8,11 @@
import static org.hamcrest.core.StringContains.containsString;
import static org.junit.Assert.assertEquals;
+import com.android.tools.r8.JdkClassFileProvider;
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.ToolHelper;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.StringUtils;
@@ -35,7 +37,7 @@
@Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withCfRuntimes().build();
+ return getTestParameters().withSystemRuntime().build();
}
public PrintConfigurationTest(TestParameters parameters) {
@@ -83,8 +85,10 @@
"-printconfiguration proguard-config-out.txt");
FileUtils.writeTextFile(proguardConfigFile, proguardConfig.trim());
+ assertEquals(TestRuntime.getSystemRuntime(), parameters.getRuntime());
testForExternalR8(Backend.DEX, parameters.getRuntime())
.addProgramClasses(PrintConfigurationTestClass.class)
+ .addLibraryProvider(JdkClassFileProvider.fromSystemJdk())
.addKeepRuleFiles(proguardConfigFile)
.compile();
diff --git a/tools/create_r8lib.py b/tools/create_r8lib.py
index c48eaca..b6189e6 100755
--- a/tools/create_r8lib.py
+++ b/tools/create_r8lib.py
@@ -96,7 +96,7 @@
cmd.extend(['--source-file-template', source_file_template])
cmd.extend(['--output', args.output])
cmd.extend(['--pg-map-output', args.output + '.map'])
- cmd.extend(['--lib', 'third_party/openjdk/openjdk-rt-1.8/rt.jar'])
+ cmd.extend(['--lib', jdk.GetJdkHome()])
if args.pg_conf:
for pgconf in args.pg_conf:
cmd.extend(['--pg-conf', pgconf])