Parameterize kotlin tests over kotlin compiler
Bug: 174292935
Bug: 174336620
Change-Id: Iada498b998741cb0cd6be5ba3a8999e99fd435c1
diff --git a/src/test/java/com/android/tools/r8/KotlinCompilerTool.java b/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
index 9a36a04..7e1b57a 100644
--- a/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
+++ b/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
@@ -21,6 +21,7 @@
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.function.Consumer;
import java.util.stream.Collectors;
import org.junit.rules.TemporaryFolder;
@@ -29,29 +30,35 @@
public static final class KotlinCompiler {
private final String name;
- private final Path path;
+ private final Path lib;
+ private final Path compiler;
- public KotlinCompiler(String name, Path path) {
+ public KotlinCompiler(String name) {
this.name = name;
- this.path = path;
+ this.lib = Paths.get(ToolHelper.THIRD_PARTY_DIR, "kotlin", name, "kotlinc", "lib");
+ this.compiler = lib.resolve("kotlin-compiler.jar");
}
- public Path getPath() {
- return path;
+ public KotlinCompiler(String name, Path compiler) {
+ this.name = name;
+ this.compiler = compiler;
+ this.lib = null;
+ }
+
+ public Path getCompiler() {
+ return compiler;
+ }
+
+ public Path getFolder() {
+ return lib;
+ }
+
+ @Override
+ public String toString() {
+ return name;
}
}
- public static KotlinCompiler KOTLINC =
- new KotlinCompiler(
- "kotlinc",
- Paths.get(
- ToolHelper.THIRD_PARTY_DIR,
- "kotlin",
- "kotlin-compiler-1.3.72",
- "kotlinc",
- "lib",
- "kotlin-compiler.jar"));
-
private final CfRuntime jdk;
private final TestState state;
private final KotlinCompiler compiler;
@@ -70,6 +77,14 @@
this.targetVersion = targetVersion;
}
+ public KotlinCompiler getCompiler() {
+ return compiler;
+ }
+
+ public KotlinTargetVersion getTargetVersion() {
+ return targetVersion;
+ }
+
public static KotlinCompilerTool create(
CfRuntime jdk,
TemporaryFolder temp,
@@ -145,6 +160,11 @@
return this;
}
+ public KotlinCompilerTool apply(Consumer<KotlinCompilerTool> consumer) {
+ consumer.accept(this);
+ return this;
+ }
+
private Path getOrCreateOutputPath() throws IOException {
return output != null ? output : state.getNewTempFolder().resolve("out.jar");
}
@@ -167,7 +187,7 @@
List<String> cmdline = new ArrayList<>();
cmdline.add(jdk.getJavaExecutable().toString());
cmdline.add("-cp");
- cmdline.add(compiler.getPath().toString());
+ cmdline.add(compiler.getCompiler().toString());
cmdline.add(ToolHelper.K2JVMCompiler);
if (useJvmAssertions) {
cmdline.add("-Xassertions=jvm");
diff --git a/src/test/java/com/android/tools/r8/KotlinTestBase.java b/src/test/java/com/android/tools/r8/KotlinTestBase.java
index 6cd9cfd..c112fb9 100644
--- a/src/test/java/com/android/tools/r8/KotlinTestBase.java
+++ b/src/test/java/com/android/tools/r8/KotlinTestBase.java
@@ -5,6 +5,8 @@
import static org.hamcrest.CoreMatchers.containsString;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
+import com.android.tools.r8.TestRuntime.CfRuntime;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.FileUtils;
@@ -12,7 +14,12 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.IdentityHashMap;
import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
import java.util.stream.Collectors;
import org.hamcrest.Matcher;
@@ -29,10 +36,12 @@
private static final String RSRC = "kotlinR8TestResources";
+ protected final KotlinCompiler kotlinc;
protected final KotlinTargetVersion targetVersion;
- protected KotlinTestBase(KotlinTargetVersion targetVersion) {
+ protected KotlinTestBase(KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
this.targetVersion = targetVersion;
+ this.kotlinc = kotlinc;
}
protected static List<Path> getKotlinFilesInTestPackage(Package pkg) throws IOException {
@@ -42,8 +51,7 @@
.collect(Collectors.toList());
}
- protected static Path getKotlinFileInTestPackage(Package pkg, String fileName)
- throws IOException {
+ protected static Path getKotlinFileInTestPackage(Package pkg, String fileName) {
String folder = DescriptorUtils.getBinaryNameFromJavaType(pkg.getName());
return getKotlinFileInTest(folder, fileName);
}
@@ -73,4 +81,53 @@
protected static Matcher<String> expectedInfoMessagesFromKotlinStdLib() {
return containsString("No VersionRequirement");
}
+
+ protected KotlinCompilerTool kotlinCompilerTool() {
+ return KotlinCompilerTool.create(CfRuntime.getCheckedInJdk9(), temp, kotlinc, targetVersion);
+ }
+
+ public static KotlinCompileMemoizer getCompileMemoizer(Path... source) {
+ return new KotlinCompileMemoizer(Arrays.asList(source));
+ }
+
+ public static KotlinCompileMemoizer getCompileMemoizer(Collection<Path> sources) {
+ return new KotlinCompileMemoizer(sources);
+ }
+
+ public static class KotlinCompileMemoizer {
+
+ private final Collection<Path> sources;
+ private Consumer<KotlinCompilerTool> kotlinCompilerToolConsumer = x -> {};
+ private final Map<KotlinCompiler, Map<KotlinTargetVersion, Path>> compiledPaths =
+ new IdentityHashMap<>();
+
+ public KotlinCompileMemoizer(Collection<Path> sources) {
+ this.sources = sources;
+ }
+
+ public KotlinCompileMemoizer configure(Consumer<KotlinCompilerTool> consumer) {
+ this.kotlinCompilerToolConsumer = consumer;
+ return this;
+ }
+
+ public Path getForConfiguration(KotlinCompiler compiler, KotlinTargetVersion targetVersion) {
+ Map<KotlinTargetVersion, Path> kotlinTargetVersionPathMap = compiledPaths.get(compiler);
+ if (kotlinTargetVersionPathMap == null) {
+ kotlinTargetVersionPathMap = new IdentityHashMap<>();
+ compiledPaths.put(compiler, kotlinTargetVersionPathMap);
+ }
+ return kotlinTargetVersionPathMap.computeIfAbsent(
+ targetVersion,
+ ignored -> {
+ try {
+ return kotlinc(compiler, targetVersion)
+ .addSourceFiles(sources)
+ .apply(kotlinCompilerToolConsumer)
+ .compile();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
+ }
}
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 0fe11ae..04155b9 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -10,6 +10,7 @@
import static org.junit.Assert.fail;
import com.android.tools.r8.DeviceRunner.DeviceRunnerConfigurationException;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestBase.Backend;
import com.android.tools.r8.TestRuntime.CfRuntime;
import com.android.tools.r8.ToolHelper.DexVm.Kind;
@@ -140,17 +141,7 @@
public static final String RHINO_ANDROID_JAR =
"third_party/rhino-android-1.1.1/rhino-android-1.1.1.jar";
public static final String RHINO_JAR = "third_party/rhino-1.7.10/rhino-1.7.10.jar";
- static final String KT_PRELOADER =
- "third_party/kotlin/kotlin-compiler-1.3.72/kotlinc/lib/kotlin-preloader.jar";
- public static final String KT_COMPILER =
- "third_party/kotlin/kotlin-compiler-1.3.72/kotlinc/lib/kotlin-compiler.jar";
public static final String K2JVMCompiler = "org.jetbrains.kotlin.cli.jvm.K2JVMCompiler";
- public static final String KT_STDLIB =
- "third_party/kotlin/kotlin-compiler-1.3.72/kotlinc/lib/kotlin-stdlib.jar";
- public static final String KT_REFLECT =
- "third_party/kotlin/kotlin-compiler-1.3.72/kotlinc/lib/kotlin-reflect.jar";
- public static final String KT_SCRIPT_RT =
- "third_party/kotlin/kotlin-compiler-1.3.72/kotlinc/lib/kotlin-script-runtime.jar";
private static final String ANDROID_JAR_PATTERN = "third_party/android_jar/lib-v%d/android.jar";
private static final AndroidApiLevel DEFAULT_MIN_SDK = AndroidApiLevel.I;
@@ -841,16 +832,22 @@
throw new Unreachable("Unable to find a most recent android.jar");
}
- public static Path getKotlinStdlibJar() {
- Path path = Paths.get(KT_STDLIB);
- assert Files.exists(path) : "Expected kotlin stdlib jar";
- return path;
+ public static Path getKotlinStdlibJar(KotlinCompiler kotlinc) {
+ Path stdLib = kotlinc.getFolder().resolve("kotlin-stdlib.jar");
+ assert Files.exists(stdLib) : "Expected kotlin stdlib jar";
+ return stdLib;
}
- public static Path getKotlinReflectJar() {
- Path path = Paths.get(KT_REFLECT);
- assert Files.exists(path) : "Expected kotlin reflect jar";
- return path;
+ public static Path getKotlinReflectJar(KotlinCompiler kotlinc) {
+ Path reflectJar = kotlinc.getFolder().resolve("kotlin-reflect.jar");
+ assert Files.exists(reflectJar) : "Expected kotlin reflect jar";
+ return reflectJar;
+ }
+
+ public static Path getKotlinScriptRuntime(KotlinCompiler kotlinc) {
+ Path reflectJar = kotlinc.getFolder().resolve("kotlin-script-runtime.jar");
+ assert Files.exists(reflectJar) : "Expected kotlin script runtime jar";
+ return reflectJar;
}
public static Path getJdwpTestsCfJarPath(AndroidApiLevel minSdk) {
@@ -1355,41 +1352,6 @@
return runJava(runtime, ImmutableList.of(), classpath, args);
}
- @Deprecated
- public static ProcessResult runKotlinc(
- List<Path> classPaths,
- Path directoryToCompileInto,
- List<String> extraOptions,
- Path... filesToCompile)
- throws IOException {
- List<String> cmdline = new ArrayList<>(Arrays.asList(getJavaExecutable()));
- cmdline.add("-jar");
- cmdline.add(KT_PRELOADER);
- cmdline.add("org.jetbrains.kotlin.preloading.Preloader");
- cmdline.add("-cp");
- cmdline.add(KT_COMPILER);
- cmdline.add(K2JVMCompiler);
- String[] strings = Arrays.stream(filesToCompile).map(Path::toString).toArray(String[]::new);
- Collections.addAll(cmdline, strings);
- cmdline.add("-d");
- cmdline.add(directoryToCompileInto.toString());
- List<String> cp = classPaths == null ? null
- : classPaths.stream().map(Path::toString).collect(Collectors.toList());
- if (cp != null) {
- cmdline.add("-cp");
- if (isWindows()) {
- cmdline.add(String.join(";", cp));
- } else {
- cmdline.add(String.join(":", cp));
- }
- }
- if (extraOptions != null) {
- cmdline.addAll(extraOptions);
- }
- ProcessBuilder builder = new ProcessBuilder(cmdline);
- return ToolHelper.runProcess(builder);
- }
-
public static ProcessResult runJava(
CfRuntime runtime, List<String> vmArgs, List<Path> classpath, String... args)
throws IOException {
@@ -2160,6 +2122,14 @@
}
}
+ public static KotlinCompiler getKotlinC_1_3_72() {
+ return new KotlinCompiler("kotlin-compiler-1.3.72");
+ }
+
+ public static KotlinCompiler[] getKotlinCompilers() {
+ return new KotlinCompiler[] {getKotlinC_1_3_72()};
+ }
+
public static void disassemble(AndroidApp app, PrintStream ps)
throws IOException, ExecutionException {
DexApplication application =
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 524cbfa..607f96d 100644
--- a/src/test/java/com/android/tools/r8/annotations/SourceDebugExtensionTest.java
+++ b/src/test/java/com/android/tools/r8/annotations/SourceDebugExtensionTest.java
@@ -4,16 +4,16 @@
package com.android.tools.r8.annotations;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
import static com.android.tools.r8.ToolHelper.getFilesInTestFolderRelativeToClass;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.MatcherAssert.assertThat;
import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.CompilationMode;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
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.CfRuntime;
import com.android.tools.r8.ToolHelper;
@@ -25,6 +25,7 @@
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.io.IOException;
import java.nio.file.Path;
+import java.util.List;
import java.util.concurrent.ExecutionException;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -35,14 +36,17 @@
public class SourceDebugExtensionTest extends TestBase {
private final TestParameters parameters;
+ private final KotlinCompiler kotlinCompiler;
- @Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimesAndApiLevels().build();
+ @Parameters(name = "{0}, kotlinc: {1}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ getTestParameters().withAllRuntimesAndApiLevels().build(), getKotlinCompilers());
}
- public SourceDebugExtensionTest(TestParameters parameters) {
+ public SourceDebugExtensionTest(TestParameters parameters, KotlinCompiler kotlinCompiler) {
this.parameters = parameters;
+ this.kotlinCompiler = kotlinCompiler;
}
@Test
@@ -50,7 +54,7 @@
CfRuntime cfRuntime =
parameters.isCfRuntime() ? parameters.getRuntime().asCf() : TestRuntime.getCheckedInJdk9();
Path kotlinSources =
- kotlinc(cfRuntime, getStaticTemp(), KOTLINC, KotlinTargetVersion.JAVA_8)
+ kotlinc(cfRuntime, getStaticTemp(), kotlinCompiler, KotlinTargetVersion.JAVA_8)
.addSourceFiles(
getFilesInTestFolderRelativeToClass(
KotlinInlineFunctionRetraceTest.class, "kt", ".kt"))
@@ -58,7 +62,7 @@
CodeInspector kotlinInspector = new CodeInspector(kotlinSources);
inspectSourceDebugExtension(kotlinInspector);
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinCompiler))
.addProgramFiles(kotlinSources)
.addKeepAttributes(ProguardKeepAttributes.SOURCE_DEBUG_EXTENSION)
.addKeepAllClassesRule()
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 693eced..7aa4205 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
@@ -3,13 +3,12 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.cf.bootstrap;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.internal.CompilationTestBase;
@@ -38,27 +37,29 @@
"Hello.kt");
private static final int MAX_SIZE = (int) (31361268 * 0.4);
- private TestParameters parameters;
+ private final TestParameters parameters;
+ private final KotlinCompiler kotlinCompiler;
- @Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters().withCfRuntimes().build();
+ @Parameters(name = "{0}, kotlinc: {1}")
+ public static List<Object[]> data() {
+ return buildParameters(getTestParameters().withCfRuntimes().build(), getKotlinCompilers());
}
- public KotlinCompilerTreeShakingTest(TestParameters parameters) {
+ public KotlinCompilerTreeShakingTest(TestParameters parameters, KotlinCompiler kotlinCompiler) {
this.parameters = parameters;
+ this.kotlinCompiler = kotlinCompiler;
}
@Test
public void testForRuntime() throws Exception {
// Compile Hello.kt and make sure it works as expected.
Path classPathBefore =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, KotlinTargetVersion.JAVA_8)
+ kotlinc(parameters.getRuntime().asCf(), kotlinCompiler, KotlinTargetVersion.JAVA_8)
.addSourceFiles(HELLO_KT)
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar())
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinCompiler))
.addClasspath(classPathBefore)
.run(parameters.getRuntime(), PKG_NAME + ".HelloKt")
.assertSuccessWithOutputLines("I'm Woody. Howdy, howdy, howdy.");
@@ -69,41 +70,40 @@
+ "b/144877828: assertion error in method naming state during interface method renaming; "
+ "b/144859533: umbrella"
)
+
@Test
public void test() throws Exception {
List<Path> libs =
ImmutableList.of(
- ToolHelper.getKotlinStdlibJar(),
- ToolHelper.getKotlinReflectJar(),
- Paths.get(ToolHelper.KT_SCRIPT_RT));
+ ToolHelper.getKotlinStdlibJar(kotlinCompiler),
+ ToolHelper.getKotlinReflectJar(kotlinCompiler),
+ ToolHelper.getKotlinScriptRuntime(kotlinCompiler));
// Process kotlin-compiler.jar.
Path r8ProcessedKotlinc =
testForR8(parameters.getBackend())
.addLibraryFiles(libs)
.addLibraryFiles(ToolHelper.getJava8RuntimeJar())
- .addProgramFiles(Paths.get(ToolHelper.KT_COMPILER))
+ .addProgramFiles(kotlinCompiler.getCompiler())
.addKeepAttributes("*Annotation*")
.addKeepClassAndMembersRules(ToolHelper.K2JVMCompiler)
.addKeepClassAndMembersRules("**.K2JVMCompilerArguments")
.addKeepClassAndMembersRules("**.*Argument*")
.addKeepClassAndMembersRules("**.Freezable")
.addKeepRules(
- "-keepclassmembers class * {",
- " *** parseCommandLineArguments(...);",
- "}"
- )
+ "-keepclassmembers class * {", " *** parseCommandLineArguments(...);", "}")
.addKeepRules(
"-keepclassmembers,allowoptimization enum * {",
" public static **[] values();",
" public static ** valueOf(java.lang.String);",
"}")
- .addOptionsModification(o -> {
- // Ignore com.sun.tools.javac.main.JavaCompiler and others
- // Resulting jar may not be able to deal with .java source files, though.
- o.ignoreMissingClasses = true;
- // b/144861100: invoke-static on interface is allowed up to JDK 8.
- o.testing.allowInvokeErrors = true;
- })
+ .addOptionsModification(
+ o -> {
+ // Ignore com.sun.tools.javac.main.JavaCompiler and others
+ // Resulting jar may not be able to deal with .java source files, though.
+ o.ignoreMissingClasses = true;
+ // b/144861100: invoke-static on interface is allowed up to JDK 8.
+ o.testing.allowInvokeErrors = true;
+ })
.compile()
.writeToZip();
@@ -125,7 +125,7 @@
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar())
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinCompiler))
.addClasspath(classPathAfter)
.run(parameters.getRuntime(), PKG_NAME + ".HelloKt")
.assertSuccessWithOutputLines("I'm Woody. Howdy, howdy, howdy.");
diff --git a/src/test/java/com/android/tools/r8/debug/KotlinStdLibCompilationTest.java b/src/test/java/com/android/tools/r8/debug/KotlinStdLibCompilationTest.java
index ae1c81c..deb97d8 100644
--- a/src/test/java/com/android/tools/r8/debug/KotlinStdLibCompilationTest.java
+++ b/src/test/java/com/android/tools/r8/debug/KotlinStdLibCompilationTest.java
@@ -3,16 +3,18 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.debug;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static org.junit.Assume.assumeTrue;
import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.CompilationMode;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestDiagnosticMessages;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersBuilder;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper;
+import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -22,21 +24,25 @@
public class KotlinStdLibCompilationTest extends TestBase {
private final TestParameters parameters;
+ private final KotlinCompiler kotlinc;
- @Parameters(name = "{0}")
- public static TestParametersCollection setup() {
- return TestParametersBuilder.builder().withAllRuntimes().withAllApiLevels().build();
+ @Parameters(name = "{0}, kotlinc: {1}")
+ public static List<Object[]> setup() {
+ return buildParameters(
+ TestParametersBuilder.builder().withAllRuntimes().withAllApiLevels().build(),
+ getKotlinCompilers());
}
- public KotlinStdLibCompilationTest(TestParameters parameters) {
+ public KotlinStdLibCompilationTest(TestParameters parameters, KotlinCompiler kotlinc) {
this.parameters = parameters;
+ this.kotlinc = kotlinc;
}
@Test
public void testD8() throws CompilationFailedException {
assumeTrue(parameters.isDexRuntime());
testForD8()
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.setMinApi(parameters.getApiLevel())
.compileWithExpectedDiagnostics(TestDiagnosticMessages::assertNoMessages);
}
@@ -44,7 +50,7 @@
@Test
public void testR8() throws CompilationFailedException {
testForR8(parameters.getBackend())
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.noMinification()
.noTreeShaking()
.addKeepAllAttributes()
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/kotlin/KotlinMetadataTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/kotlin/KotlinMetadataTest.java
index ebf503a..89748a7 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/kotlin/KotlinMetadataTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/kotlin/KotlinMetadataTest.java
@@ -4,7 +4,8 @@
package com.android.tools.r8.desugar.desugaredlibrary.kotlin;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.KotlinTestBase.getCompileMemoizer;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.equalTo;
@@ -15,6 +16,8 @@
import com.android.tools.r8.D8TestRunResult;
import com.android.tools.r8.DexIndexedConsumer.ArchiveConsumer;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
+import com.android.tools.r8.KotlinTestBase.KotlinCompileMemoizer;
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.R8TestCompileResult;
import com.android.tools.r8.R8TestRunResult;
@@ -24,20 +27,15 @@
import com.android.tools.r8.desugar.desugaredlibrary.DesugaredLibraryTestBase;
import com.android.tools.r8.kotlin.KotlinMetadataWriter;
import com.android.tools.r8.shaking.ProguardKeepAttributes;
-import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.io.File;
-import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import kotlinx.metadata.jvm.KotlinClassMetadata;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -50,50 +48,44 @@
private final TestParameters parameters;
private final boolean shrinkDesugaredLibrary;
private final KotlinTargetVersion targetVersion;
+ private final KotlinCompiler kotlinCompiler;
private static final String EXPECTED_OUTPUT = "Wuhuu, my special day is: 1997-8-29-2-14";
- @Parameters(name = "{1}, shrinkDesugaredLibrary: {0}, target: {2}")
+ @Parameters(name = "{1}, shrinkDesugaredLibrary: {0}, target: {2}, kotlinc: {3}")
public static List<Object[]> data() {
return buildParameters(
BooleanUtils.values(),
getTestParameters().withAllRuntimesAndApiLevels().build(),
- KotlinTargetVersion.values());
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public KotlinMetadataTest(
boolean shrinkDesugaredLibrary,
TestParameters parameters,
- KotlinTargetVersion targetVersion) {
+ KotlinTargetVersion targetVersion,
+ KotlinCompiler kotlinCompiler) {
this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
this.parameters = parameters;
this.targetVersion = targetVersion;
+ this.kotlinCompiler = kotlinCompiler;
}
- private static Map<KotlinTargetVersion, Path> compiledJars = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- compiledJars.put(
- targetVersion,
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(
- Paths.get(
- ToolHelper.TESTS_DIR,
- "java",
- DescriptorUtils.getBinaryNameFromJavaType(PKG),
- "Main" + FileUtils.KT_EXTENSION))
- .compile());
- }
- }
+ private static KotlinCompileMemoizer compiledJars =
+ getCompileMemoizer(
+ Paths.get(
+ ToolHelper.TESTS_DIR,
+ "java",
+ DescriptorUtils.getBinaryNameFromJavaType(PKG),
+ "Main" + FileUtils.KT_EXTENSION));
@Test
public void testCf() throws Exception {
assumeTrue(parameters.getRuntime().isCf());
testForRuntime(parameters)
- .addProgramFiles(compiledJars.get(targetVersion))
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(ToolHelper.getKotlinReflectJar())
+ .addProgramFiles(compiledJars.getForConfiguration(kotlinCompiler, targetVersion))
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinCompiler))
+ .addProgramFiles(ToolHelper.getKotlinReflectJar(kotlinCompiler))
.run(parameters.getRuntime(), PKG + ".MainKt")
.assertSuccessWithOutputLines(EXPECTED_OUTPUT);
}
@@ -105,9 +97,9 @@
final File output = temp.newFile("output.zip");
final D8TestRunResult d8TestRunResult =
testForD8()
- .addProgramFiles(compiledJars.get(targetVersion))
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(ToolHelper.getKotlinReflectJar())
+ .addProgramFiles(compiledJars.getForConfiguration(kotlinCompiler, targetVersion))
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinCompiler))
+ .addProgramFiles(ToolHelper.getKotlinReflectJar(kotlinCompiler))
.setProgramConsumer(new ArchiveConsumer(output.toPath(), true))
.setMinApi(parameters.getApiLevel())
.enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
@@ -134,9 +126,9 @@
boolean desugarLibrary = parameters.isDexRuntime() && requiresAnyCoreLibDesugaring(parameters);
final R8FullTestBuilder testBuilder =
testForR8(parameters.getBackend())
- .addProgramFiles(compiledJars.get(targetVersion))
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(ToolHelper.getKotlinReflectJar())
+ .addProgramFiles(compiledJars.getForConfiguration(kotlinCompiler, targetVersion))
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinCompiler))
+ .addProgramFiles(ToolHelper.getKotlinReflectJar(kotlinCompiler))
.addKeepMainRule(PKG + ".MainKt")
.addKeepAllClassesRule()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/kotlin/SimpleKotlinEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/kotlin/SimpleKotlinEnumUnboxingTest.java
index 1bb9c1e..a4f280c 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/kotlin/SimpleKotlinEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/kotlin/SimpleKotlinEnumUnboxingTest.java
@@ -4,21 +4,20 @@
package com.android.tools.r8.enumunboxing.kotlin;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.KotlinTestBase.getCompileMemoizer;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static org.junit.Assume.assumeTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
+import com.android.tools.r8.KotlinTestBase.KotlinCompileMemoizer;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.enumunboxing.EnumUnboxingTestBase;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.DescriptorUtils;
-import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -31,51 +30,45 @@
private final boolean enumValueOptimization;
private final EnumKeepRules enumKeepRules;
private final KotlinTargetVersion targetVersion;
+ private final KotlinCompiler kotlinCompiler;
private static final String PKG = SimpleKotlinEnumUnboxingTest.class.getPackage().getName();
- private static Map<KotlinTargetVersion, Path> jars = new HashMap<>();
+ private static final KotlinCompileMemoizer jars =
+ getCompileMemoizer(
+ Paths.get(
+ ToolHelper.TESTS_DIR,
+ "java",
+ DescriptorUtils.getBinaryNameFromJavaType(PKG),
+ "Main.kt"));
- @Parameters(name = "{0}, valueOpt: {1}, keep: {2}, kotlin targetVersion: {3}")
+ @Parameters(name = "{0}, valueOpt: {1}, keep: {2}, kotlin targetVersion: {3}, kotlinc: {4}")
public static List<Object[]> enumUnboxingTestParameters() {
return buildParameters(
getTestParameters().withAllRuntimesAndApiLevels().build(),
BooleanUtils.values(),
getAllEnumKeepRules(),
- KotlinTargetVersion.values());
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public SimpleKotlinEnumUnboxingTest(
TestParameters parameters,
boolean enumValueOptimization,
EnumKeepRules enumKeepRules,
- KotlinTargetVersion targetVersion) {
+ KotlinTargetVersion targetVersion,
+ KotlinCompiler kotlinCompiler) {
this.parameters = parameters;
this.enumValueOptimization = enumValueOptimization;
this.enumKeepRules = enumKeepRules;
this.targetVersion = targetVersion;
- }
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- jars.put(
- targetVersion,
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(
- Paths.get(
- ToolHelper.TESTS_DIR,
- "java",
- DescriptorUtils.getBinaryNameFromJavaType(PKG),
- "Main.kt"))
- .compile());
- }
+ this.kotlinCompiler = kotlinCompiler;
}
@Test
public void testEnumUnboxing() throws Exception {
assumeTrue(parameters.isDexRuntime());
testForR8(parameters.getBackend())
- .addProgramFiles(jars.get(targetVersion))
+ .addProgramFiles(jars.getForConfiguration(kotlinCompiler, targetVersion))
.addKeepMainRule(PKG + ".MainKt")
.addKeepRules(enumKeepRules.getKeepRules())
.addKeepRuntimeVisibleAnnotations()
diff --git a/src/test/java/com/android/tools/r8/graph/DexTypeTest.java b/src/test/java/com/android/tools/r8/graph/DexTypeTest.java
index 6b2d73e..82ee9e8 100644
--- a/src/test/java/com/android/tools/r8/graph/DexTypeTest.java
+++ b/src/test/java/com/android/tools/r8/graph/DexTypeTest.java
@@ -28,7 +28,7 @@
new ApplicationReader(
AndroidApp.builder()
.addLibraryFiles(ToolHelper.getDefaultAndroidJar())
- .addLibraryFiles(ToolHelper.getKotlinStdlibJar())
+ .addLibraryFiles(ToolHelper.getKotlinStdlibJar(ToolHelper.getKotlinC_1_3_72()))
.build(),
options,
Timing.empty())
diff --git a/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java b/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
index f76758c..e16feb6 100644
--- a/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
+++ b/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
@@ -14,6 +14,7 @@
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.KotlinTestBase;
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.R8TestRunResult;
@@ -51,13 +52,16 @@
private final List<Path> extraClasspath = new ArrayList<>();
// Some tests defined in subclasses, e.g., Metadata tests, don't care about access relaxation.
- protected AbstractR8KotlinTestBase(KotlinTargetVersion kotlinTargetVersion) {
- this(kotlinTargetVersion, false);
+ protected AbstractR8KotlinTestBase(
+ KotlinTargetVersion kotlinTargetVersion, KotlinCompiler kotlinc) {
+ this(kotlinTargetVersion, kotlinc, false);
}
protected AbstractR8KotlinTestBase(
- KotlinTargetVersion kotlinTargetVersion, boolean allowAccessModification) {
- super(kotlinTargetVersion);
+ KotlinTargetVersion kotlinTargetVersion,
+ KotlinCompiler kotlinc,
+ boolean allowAccessModification) {
+ super(kotlinTargetVersion, kotlinc);
this.allowAccessModification = allowAccessModification;
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
index 2bb0867..0f5b195 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.kotlin;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -12,6 +13,7 @@
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.R8TestRunResult;
import com.android.tools.r8.ThrowableConsumer;
@@ -43,14 +45,15 @@
@RunWith(Parameterized.class)
public class KotlinClassInlinerTest extends AbstractR8KotlinTestBase {
- @Parameterized.Parameters(name = "target: {0}, allowAccessModification: {1}")
+ @Parameterized.Parameters(name = "target: {0}, kotlinc: {1}, allowAccessModification: {2}")
public static Collection<Object[]> data() {
- return buildParameters(KotlinTargetVersion.values(), BooleanUtils.values());
+ return buildParameters(
+ KotlinTargetVersion.values(), getKotlinCompilers(), BooleanUtils.values());
}
public KotlinClassInlinerTest(
- KotlinTargetVersion targetVersion, boolean allowAccessModification) {
- super(targetVersion, allowAccessModification);
+ KotlinTargetVersion targetVersion, KotlinCompiler kotlinc, boolean allowAccessModification) {
+ super(targetVersion, kotlinc, allowAccessModification);
}
private static boolean isLambda(DexClass clazz) {
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinClassStaticizerTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinClassStaticizerTest.java
index bf74d90..ec1793d 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinClassStaticizerTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinClassStaticizerTest.java
@@ -4,12 +4,14 @@
package com.android.tools.r8.kotlin;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.R8TestRunResult;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.utils.BooleanUtils;
@@ -24,14 +26,15 @@
@RunWith(Parameterized.class)
public class KotlinClassStaticizerTest extends AbstractR8KotlinTestBase {
- @Parameterized.Parameters(name = "target: {0}, allowAccessModification: {1}")
+ @Parameterized.Parameters(name = "target: {0}, kotlinc: {1}, allowAccessModification: {2}")
public static Collection<Object[]> data() {
- return buildParameters(KotlinTargetVersion.values(), BooleanUtils.values());
+ return buildParameters(
+ KotlinTargetVersion.values(), getKotlinCompilers(), BooleanUtils.values());
}
public KotlinClassStaticizerTest(
- KotlinTargetVersion targetVersion, boolean allowAccessModification) {
- super(targetVersion, allowAccessModification);
+ KotlinTargetVersion targetVersion, KotlinCompiler kotlinc, boolean allowAccessModification) {
+ super(targetVersion, kotlinc, allowAccessModification);
}
@Test
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinDuplicateAnnotationTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinDuplicateAnnotationTest.java
index 35e3109..2fb48e0 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinDuplicateAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinDuplicateAnnotationTest.java
@@ -3,12 +3,14 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.fail;
import static org.junit.Assume.assumeTrue;
import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.utils.BooleanUtils;
@@ -34,11 +36,12 @@
o.enableInlining = false;
};
- @Parameterized.Parameters(name = "{0} target: {1}, allowAccessModification: {2}")
+ @Parameterized.Parameters(name = "{0} target: {1}, kotlinc: {2}, allowAccessModification: {3}")
public static Collection<Object[]> data() {
return buildParameters(
getTestParameters().withAllRuntimes().build(),
KotlinTargetVersion.values(),
+ getKotlinCompilers(),
BooleanUtils.values());
}
@@ -47,8 +50,9 @@
public KotlinDuplicateAnnotationTest(
TestParameters parameters,
KotlinTargetVersion targetVersion,
+ KotlinCompiler kotlinc,
boolean allowAccessModification) {
- super(targetVersion, allowAccessModification);
+ super(targetVersion, kotlinc, allowAccessModification);
this.parameters = parameters;
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
index dc917ab..83ea8fc 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
@@ -3,11 +3,13 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assume.assumeTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.utils.BooleanUtils;
@@ -24,11 +26,12 @@
private static final String FOLDER = "intrinsics";
private static final String MAIN = FOLDER + ".InlineKt";
- @Parameterized.Parameters(name = "{0} target: {1}, allowAccessModification: {2}")
+ @Parameterized.Parameters(name = "{0} target: {1}, kotlinc: {2}, allowAccessModification: {3}")
public static Collection<Object[]> data() {
return buildParameters(
getTestParameters().withAllRuntimes().build(),
KotlinTargetVersion.values(),
+ getKotlinCompilers(),
BooleanUtils.values());
}
@@ -37,8 +40,9 @@
public KotlinIntrinsicsInlineTest(
TestParameters parameters,
KotlinTargetVersion targetVersion,
+ KotlinCompiler kotlinc,
boolean allowAccessModification) {
- super(targetVersion, allowAccessModification);
+ super(targetVersion, kotlinc, allowAccessModification);
this.parameters = parameters;
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinUnusedArgumentsInLambdasTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinUnusedArgumentsInLambdasTest.java
index 3c28a7d..b59d98c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinUnusedArgumentsInLambdasTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinUnusedArgumentsInLambdasTest.java
@@ -3,11 +3,13 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
@@ -20,14 +22,15 @@
@RunWith(Parameterized.class)
public class KotlinUnusedArgumentsInLambdasTest extends AbstractR8KotlinTestBase {
- @Parameterized.Parameters(name = "target: {0}, allowAccessModification: {1}")
+ @Parameterized.Parameters(name = "target: {0}, kotlinc: {1}, allowAccessModification: {2}")
public static Collection<Object[]> data() {
- return buildParameters(KotlinTargetVersion.values(), BooleanUtils.values());
+ return buildParameters(
+ KotlinTargetVersion.values(), getKotlinCompilers(), BooleanUtils.values());
}
public KotlinUnusedArgumentsInLambdasTest(
- KotlinTargetVersion targetVersion, boolean allowAccessModification) {
- super(targetVersion, allowAccessModification);
+ KotlinTargetVersion targetVersion, KotlinCompiler kotlinc, boolean allowAccessModification) {
+ super(targetVersion, kotlinc, allowAccessModification);
}
@Test
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinUnusedSingletonTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinUnusedSingletonTest.java
index 10fe60e..c358325 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinUnusedSingletonTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinUnusedSingletonTest.java
@@ -3,12 +3,14 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
@@ -25,17 +27,18 @@
@RunWith(Parameterized.class)
public class KotlinUnusedSingletonTest extends AbstractR8KotlinTestBase {
- @Parameterized.Parameters(name = "target: {0}, allowAccessModification: {1}")
+ @Parameterized.Parameters(name = "target: {0}, kotlinc: {1}, allowAccessModification: {1}")
public static Collection<Object[]> data() {
- return buildParameters(KotlinTargetVersion.values(), BooleanUtils.values());
+ return buildParameters(
+ KotlinTargetVersion.values(), getKotlinCompilers(), BooleanUtils.values());
}
private static final String printlnSignature =
"void java.io.PrintStream.println(java.lang.Object)";
public KotlinUnusedSingletonTest(
- KotlinTargetVersion targetVersion, boolean allowAccessModification) {
- super(targetVersion, allowAccessModification);
+ KotlinTargetVersion targetVersion, KotlinCompiler kotlinc, boolean allowAccessModification) {
+ super(targetVersion, kotlinc, allowAccessModification);
}
@Test
diff --git a/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinReflectionLibTest.java b/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinReflectionLibTest.java
index e29373a..e90a8b6 100644
--- a/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinReflectionLibTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinReflectionLibTest.java
@@ -3,6 +3,9 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
+
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.KotlinTestBase;
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestParameters;
@@ -18,18 +21,21 @@
@RunWith(Parameterized.class)
public class ProcessKotlinReflectionLibTest extends KotlinTestBase {
- private final TestParameters parameters;
- public ProcessKotlinReflectionLibTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
- this.parameters = parameters;
- }
+ private final TestParameters parameters;
@Parameterized.Parameters(name = "{0} target: {1}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withAllRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withAllRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
+ }
+
+ public ProcessKotlinReflectionLibTest(
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
+ this.parameters = parameters;
}
private void test(Collection<String> rules) throws Exception {
@@ -39,8 +45,9 @@
private void test(
Collection<String> rules, ThrowableConsumer<R8FullTestBuilder> consumer) throws Exception {
testForR8(parameters.getBackend())
- .addLibraryFiles(ToolHelper.getMostRecentAndroidJar(), ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(ToolHelper.getKotlinReflectJar())
+ .addLibraryFiles(
+ ToolHelper.getMostRecentAndroidJar(), ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(ToolHelper.getKotlinReflectJar(kotlinc))
.addKeepRules(rules)
.addKeepAttributes(ProguardKeepAttributes.SIGNATURE)
.addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
diff --git a/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinStdlibTest.java b/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinStdlibTest.java
index 195b536..7b3fd69 100644
--- a/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinStdlibTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinStdlibTest.java
@@ -3,6 +3,9 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
+
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.KotlinTestBase;
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestParameters;
@@ -20,15 +23,18 @@
public class ProcessKotlinStdlibTest extends KotlinTestBase {
private final TestParameters parameters;
- public ProcessKotlinStdlibTest(TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
- this.parameters = parameters;
- }
-
@Parameterized.Parameters(name = "{0} target: {1}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withAllRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withAllRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
+ }
+
+ public ProcessKotlinStdlibTest(
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
+ this.parameters = parameters;
}
private void test(Collection<String> rules, boolean expectInvalidFoo) throws Exception {
@@ -41,7 +47,7 @@
ThrowableConsumer<R8FullTestBuilder> consumer)
throws Exception {
testForR8(parameters.getBackend())
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.addKeepRules(rules)
.addKeepAttributes(ProguardKeepAttributes.SIGNATURE)
.addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
index b4aeced..cd5d8b1 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
@@ -4,10 +4,12 @@
package com.android.tools.r8.kotlin;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.R8TestBuilder;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -65,14 +67,15 @@
.addProperty("property", JAVA_LANG_STRING, Visibility.PRIVATE)
.addProperty("indirectPropertyGetter", JAVA_LANG_STRING, Visibility.PRIVATE);
- @Parameterized.Parameters(name = "target: {0}, allowAccessModification: {1}")
+ @Parameterized.Parameters(name = "target: {0}, kotlinc: {1}, allowAccessModification: {2}")
public static Collection<Object[]> data() {
- return buildParameters(KotlinTargetVersion.values(), BooleanUtils.values());
+ return buildParameters(
+ KotlinTargetVersion.values(), getKotlinCompilers(), BooleanUtils.values());
}
public R8KotlinAccessorTest(
- KotlinTargetVersion targetVersion, boolean allowAccessModification) {
- super(targetVersion, allowAccessModification);
+ KotlinTargetVersion targetVersion, KotlinCompiler kotlinc, boolean allowAccessModification) {
+ super(targetVersion, kotlinc, allowAccessModification);
}
@Test
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java
index ec0ee03..ef13161 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java
@@ -4,6 +4,9 @@
package com.android.tools.r8.kotlin;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
+
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.graph.DexCode;
import com.android.tools.r8.kotlin.TestKotlinClass.Visibility;
@@ -42,14 +45,15 @@
private Consumer<InternalOptions> disableClassInliner = o -> o.enableClassInlining = false;
- @Parameterized.Parameters(name = "target: {0}, allowAccessModification: {1}")
+ @Parameterized.Parameters(name = "target: {0}, kotlinc: {2}, allowAccessModification: {1}")
public static Collection<Object[]> data() {
- return buildParameters(KotlinTargetVersion.values(), BooleanUtils.values());
+ return buildParameters(
+ KotlinTargetVersion.values(), getKotlinCompilers(), BooleanUtils.values());
}
public R8KotlinDataClassTest(
- KotlinTargetVersion targetVersion, boolean allowAccessModification) {
- super(targetVersion, allowAccessModification);
+ KotlinTargetVersion targetVersion, KotlinCompiler kotlinc, boolean allowAccessModification) {
+ super(targetVersion, kotlinc, allowAccessModification);
}
@Test
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
index 770d6cc..ea12c12 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
@@ -4,6 +4,9 @@
package com.android.tools.r8.kotlin;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
+
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.BooleanUtils;
@@ -23,14 +26,15 @@
private static final TestKotlinDataClass KOTLIN_INTRINSICS_CLASS =
new TestKotlinDataClass("kotlin.jvm.internal.Intrinsics");
- @Parameterized.Parameters(name = "target: {0}, allowAccessModification: {1}")
+ @Parameterized.Parameters(name = "target: {0}, kotlinc: {1}, allowAccessModification: {2}")
public static Collection<Object[]> data() {
- return buildParameters(KotlinTargetVersion.values(), BooleanUtils.values());
+ return buildParameters(
+ KotlinTargetVersion.values(), getKotlinCompilers(), BooleanUtils.values());
}
public R8KotlinIntrinsicsTest(
- KotlinTargetVersion targetVersion, boolean allowAccessModification) {
- super(targetVersion, allowAccessModification);
+ KotlinTargetVersion targetVersion, KotlinCompiler kotlinc, boolean allowAccessModification) {
+ super(targetVersion, kotlinc, allowAccessModification);
}
@Test
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
index 30511bb..e04585c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
@@ -4,8 +4,10 @@
package com.android.tools.r8.kotlin;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.kotlin.TestKotlinClass.Visibility;
import com.android.tools.r8.naming.MemberNaming;
@@ -93,14 +95,15 @@
o.enableClassStaticizer = false;
};
- @Parameterized.Parameters(name = "target: {0}, allowAccessModification: {1}")
+ @Parameterized.Parameters(name = "target: {0}, kotlinc: {1}, allowAccessModification: {1}")
public static Collection<Object[]> data() {
- return buildParameters(KotlinTargetVersion.values(), BooleanUtils.values());
+ return buildParameters(
+ KotlinTargetVersion.values(), getKotlinCompilers(), BooleanUtils.values());
}
public R8KotlinPropertiesTest(
- KotlinTargetVersion targetVersion, boolean allowAccessModification) {
- super(targetVersion, allowAccessModification);
+ KotlinTargetVersion targetVersion, KotlinCompiler kotlinc, boolean allowAccessModification) {
+ super(targetVersion, kotlinc, allowAccessModification);
}
@Test
diff --git a/src/test/java/com/android/tools/r8/kotlin/SimplifyIfNotNullKotlinTest.java b/src/test/java/com/android/tools/r8/kotlin/SimplifyIfNotNullKotlinTest.java
index d56d0f0..70fd115 100644
--- a/src/test/java/com/android/tools/r8/kotlin/SimplifyIfNotNullKotlinTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/SimplifyIfNotNullKotlinTest.java
@@ -3,8 +3,10 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static org.junit.Assert.assertEquals;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.BooleanUtils;
@@ -21,14 +23,15 @@
private static final String FOLDER = "non_null";
private static final String STRING = "java.lang.String";
- @Parameterized.Parameters(name = "target: {0}, allowAccessModification: {1}")
+ @Parameterized.Parameters(name = "target: {0}, kotlinc: {1}, allowAccessModification: {2}")
public static Collection<Object[]> data() {
- return buildParameters(KotlinTargetVersion.values(), BooleanUtils.values());
+ return buildParameters(
+ KotlinTargetVersion.values(), getKotlinCompilers(), BooleanUtils.values());
}
public SimplifyIfNotNullKotlinTest(
- KotlinTargetVersion targetVersion, boolean allowAccessModification) {
- super(targetVersion, allowAccessModification);
+ KotlinTargetVersion targetVersion, KotlinCompiler kotlinc, boolean allowAccessModification) {
+ super(targetVersion, kotlinc, allowAccessModification);
}
@Test
diff --git a/src/test/java/com/android/tools/r8/kotlin/coroutines/KotlinxCoroutinesTestRunner.java b/src/test/java/com/android/tools/r8/kotlin/coroutines/KotlinxCoroutinesTestRunner.java
index 6df1462..9ae5aed 100644
--- a/src/test/java/com/android/tools/r8/kotlin/coroutines/KotlinxCoroutinesTestRunner.java
+++ b/src/test/java/com/android/tools/r8/kotlin/coroutines/KotlinxCoroutinesTestRunner.java
@@ -4,9 +4,10 @@
package com.android.tools.r8.kotlin.coroutines;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static org.junit.Assert.assertEquals;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -49,16 +50,19 @@
private Set<String> notWorkingTests =
Sets.newHashSet("kotlinx.coroutines.test.TestDispatchersTest");
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
private final TestParameters parameters;
- public KotlinxCoroutinesTestRunner(TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ public KotlinxCoroutinesTestRunner(
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
@@ -88,7 +92,7 @@
}
private Path compileTestSources(Path baseJar) throws Exception {
- return kotlinc(KOTLINC, targetVersion)
+ return kotlinc(kotlinc, targetVersion)
.addArguments(
"-Xuse-experimental=kotlinx.coroutines.InternalCoroutinesApi",
"-Xuse-experimental=kotlinx.coroutines.ObsoleteCoroutinesApi",
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/JStyleKotlinLambdaMergingWithEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/JStyleKotlinLambdaMergingWithEnumUnboxingTest.java
index 1aef013..7103667 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/JStyleKotlinLambdaMergingWithEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/JStyleKotlinLambdaMergingWithEnumUnboxingTest.java
@@ -4,17 +4,20 @@
package com.android.tools.r8.kotlin.lambda;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
+
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.ir.optimize.lambda.kotlin.JStyleLambdaGroupIdFactory;
import com.android.tools.r8.ir.optimize.lambda.kotlin.KotlinLambdaGroupIdFactory;
import com.android.tools.r8.kotlin.lambda.JStyleKotlinLambdaMergingWithEnumUnboxingTest.Main.EnumUnboxingCandidate;
+import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -24,14 +27,19 @@
public class JStyleKotlinLambdaMergingWithEnumUnboxingTest extends TestBase {
private final TestParameters parameters;
+ private final KotlinCompiler kotlinc;
- @Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return TestBase.getTestParameters().withDexRuntimes().withAllApiLevels().build();
+ @Parameters(name = "{0}, kotlinc: {1}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ TestBase.getTestParameters().withDexRuntimes().withAllApiLevels().build(),
+ getKotlinCompilers());
}
- public JStyleKotlinLambdaMergingWithEnumUnboxingTest(TestParameters parameters) {
+ public JStyleKotlinLambdaMergingWithEnumUnboxingTest(
+ TestParameters parameters, KotlinCompiler kotlinc) {
this.parameters = parameters;
+ this.kotlinc = kotlinc;
}
@Test
@@ -39,7 +47,7 @@
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.addDefaultRuntimeLibrary(parameters)
- .addLibraryFiles(ToolHelper.getKotlinStdlibJar())
+ .addLibraryFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.addKeepMainRule(Main.class)
.addOptionsModification(
options ->
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KStyleKotlinLambdaMergingWithEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KStyleKotlinLambdaMergingWithEnumUnboxingTest.java
index 6edeebc..b9baae8 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KStyleKotlinLambdaMergingWithEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KStyleKotlinLambdaMergingWithEnumUnboxingTest.java
@@ -4,17 +4,20 @@
package com.android.tools.r8.kotlin.lambda;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
+
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.ir.optimize.lambda.kotlin.KStyleLambdaGroupIdFactory;
import com.android.tools.r8.ir.optimize.lambda.kotlin.KotlinLambdaGroupIdFactory;
import com.android.tools.r8.kotlin.lambda.KStyleKotlinLambdaMergingWithEnumUnboxingTest.Main.EnumUnboxingCandidate;
+import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -24,21 +27,26 @@
public class KStyleKotlinLambdaMergingWithEnumUnboxingTest extends TestBase {
private final TestParameters parameters;
+ private final KotlinCompiler kotlinc;
- @Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return TestBase.getTestParameters().withDexRuntimes().withAllApiLevels().build();
+ @Parameters(name = "{0}, kotlinc: {1}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ TestBase.getTestParameters().withDexRuntimes().withAllApiLevels().build(),
+ getKotlinCompilers());
}
- public KStyleKotlinLambdaMergingWithEnumUnboxingTest(TestParameters parameters) {
+ public KStyleKotlinLambdaMergingWithEnumUnboxingTest(
+ TestParameters parameters, KotlinCompiler kotlinc) {
this.parameters = parameters;
+ this.kotlinc = kotlinc;
}
@Test
public void test() throws Exception {
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.addKeepMainRule(Main.class)
.addOptionsModification(
options ->
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 f28f68b..1b6d4c0 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
@@ -3,10 +3,11 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.lambda;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assume.assumeTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestRuntime;
import com.android.tools.r8.TestRuntime.CfRuntime;
@@ -25,15 +26,17 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withAllRuntimesAndApiLevels().build(), KotlinTargetVersion.values());
+ getTestParameters().withAllRuntimesAndApiLevels().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public KotlinLambdaMergerValidationTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion, false);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc, false);
this.parameters = parameters;
}
@@ -46,17 +49,17 @@
CfRuntime cfRuntime =
parameters.isCfRuntime() ? parameters.getRuntime().asCf() : TestRuntime.getCheckedInJdk9();
Path ktClasses =
- kotlinc(cfRuntime, KOTLINC, targetVersion)
+ kotlinc(cfRuntime, kotlinc, targetVersion)
.addSourceFiles(getKotlinFileInTest(folder, "b143165163"))
.compile();
testForR8(parameters.getBackend())
.addLibraryFiles(ToolHelper.getJava8RuntimeJar())
- .addLibraryFiles(ToolHelper.getKotlinStdlibJar())
+ .addLibraryFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.addProgramFiles(ktClasses)
.addKeepMainRule("**.B143165163Kt")
.setMinApi(parameters.getApiLevel())
.compile()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar())
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.run(parameters.getRuntime(), pkg + ".B143165163Kt")
.assertSuccessWithOutputLines("outer foo bar", "outer foo default");
}
@@ -70,11 +73,11 @@
CfRuntime cfRuntime =
parameters.isCfRuntime() ? parameters.getRuntime().asCf() : TestRuntime.getCheckedInJdk9();
Path ktClasses =
- kotlinc(cfRuntime, KOTLINC, targetVersion)
+ kotlinc(cfRuntime, kotlinc, targetVersion)
.addSourceFiles(getKotlinFileInTest(folder, "b143165163"))
.compile();
testForR8(parameters.getBackend())
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.addProgramFiles(ktClasses)
.addKeepMainRule("**.B143165163Kt")
.allowDiagnosticWarningMessages()
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingDebugTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingDebugTest.java
index 3a795be..ec120e8 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingDebugTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingDebugTest.java
@@ -3,13 +3,15 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.lambda;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static org.hamcrest.CoreMatchers.equalTo;
import com.android.tools.r8.CompilationMode;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.kotlin.AbstractR8KotlinTestBase;
+import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -23,12 +25,13 @@
private static final String MAIN_CLASS = "reprocess_merged_lambdas_kstyle.MainKt";
@Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters().withDexRuntimes().withAllApiLevels().build();
+ public static List<Object[]> data() {
+ return buildParameters(
+ getTestParameters().withDexRuntimes().withAllApiLevels().build(), getKotlinCompilers());
}
- public KotlinLambdaMergingDebugTest(TestParameters parameters) {
- super(KotlinTargetVersion.JAVA_6);
+ public KotlinLambdaMergingDebugTest(TestParameters parameters, KotlinCompiler kotlinc) {
+ super(KotlinTargetVersion.JAVA_6, kotlinc);
this.parameters = parameters;
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTest.java
index 4f3ea88..08f4398 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTest.java
@@ -4,12 +4,14 @@
package com.android.tools.r8.kotlin.lambda;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.google.common.base.Predicates.alwaysTrue;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.fail;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexType;
@@ -46,17 +48,23 @@
private final boolean enableUnusedInterfaceRemoval;
@Parameterized.Parameters(
- name = "target: {0}, allow access modification: {1}, unused interface removal: {2}")
+ name =
+ "target: {0}, kotlinc: {1}, allow access modification: {2}, unused interface removal:"
+ + " {3}")
public static Collection<Object[]> data() {
return buildParameters(
- KotlinTargetVersion.values(), BooleanUtils.values(), BooleanUtils.values());
+ KotlinTargetVersion.values(),
+ getKotlinCompilers(),
+ BooleanUtils.values(),
+ BooleanUtils.values());
}
public KotlinLambdaMergingTest(
KotlinTargetVersion targetVersion,
+ KotlinCompiler kotlinc,
boolean allowAccessModification,
boolean enableUnusedInterfaceRemoval) {
- super(targetVersion, allowAccessModification);
+ super(targetVersion, kotlinc, allowAccessModification);
this.enableUnusedInterfaceRemoval = enableUnusedInterfaceRemoval;
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingWithReprocessingTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingWithReprocessingTest.java
index d6e8c53..b1b38b9 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingWithReprocessingTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingWithReprocessingTest.java
@@ -3,6 +3,9 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.lambda;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
+
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.kotlin.AbstractR8KotlinTestBase;
import com.android.tools.r8.utils.BooleanUtils;
@@ -14,14 +17,15 @@
@RunWith(Parameterized.class)
public class KotlinLambdaMergingWithReprocessingTest extends AbstractR8KotlinTestBase {
- @Parameterized.Parameters(name = "target: {0}, allowAccessModification: {1}")
+ @Parameterized.Parameters(name = "target: {0}, kotlinc: {1}, allowAccessModification: {2}")
public static Collection<Object[]> data() {
- return buildParameters(KotlinTargetVersion.values(), BooleanUtils.values());
+ return buildParameters(
+ KotlinTargetVersion.values(), getKotlinCompilers(), BooleanUtils.values());
}
public KotlinLambdaMergingWithReprocessingTest(
- KotlinTargetVersion targetVersion, boolean allowAccessModification) {
- super(targetVersion, allowAccessModification);
+ KotlinTargetVersion targetVersion, KotlinCompiler kotlinc, boolean allowAccessModification) {
+ super(targetVersion, kotlinc, allowAccessModification);
}
@Test
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingWithSmallInliningBudgetTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingWithSmallInliningBudgetTest.java
index 127c1e3..1dcdcfb 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingWithSmallInliningBudgetTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingWithSmallInliningBudgetTest.java
@@ -3,6 +3,9 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.lambda;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
+
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.kotlin.AbstractR8KotlinTestBase;
import com.android.tools.r8.utils.BooleanUtils;
@@ -14,14 +17,15 @@
@RunWith(Parameterized.class)
public class KotlinLambdaMergingWithSmallInliningBudgetTest extends AbstractR8KotlinTestBase {
- @Parameterized.Parameters(name = "target: {0}, allowAccessModification: {1}")
+ @Parameterized.Parameters(name = "target: {0}, kotlinc: {1}, allowAccessModification: {2}")
public static Collection<Object[]> data() {
- return buildParameters(KotlinTargetVersion.values(), BooleanUtils.values());
+ return buildParameters(
+ KotlinTargetVersion.values(), getKotlinCompilers(), BooleanUtils.values());
}
public KotlinLambdaMergingWithSmallInliningBudgetTest(
- KotlinTargetVersion targetVersion, boolean allowAccessModification) {
- super(targetVersion, allowAccessModification);
+ KotlinTargetVersion targetVersion, KotlinCompiler kotlinc, boolean allowAccessModification) {
+ super(targetVersion, kotlinc, allowAccessModification);
}
@Test
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/b148525512/B148525512.java b/src/test/java/com/android/tools/r8/kotlin/lambda/b148525512/B148525512.java
index d764d5f..1f73d0e 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/b148525512/B148525512.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/b148525512/B148525512.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.kotlin.lambda.b148525512;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertTrue;
@@ -12,6 +12,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import com.android.tools.r8.DexIndexedConsumer.ArchiveConsumer;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.KotlinTestBase;
import com.android.tools.r8.R8TestCompileResult;
import com.android.tools.r8.TestParameters;
@@ -22,16 +23,13 @@
import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
+import java.io.IOException;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import java.util.stream.Collectors;
-import org.junit.BeforeClass;
-import org.junit.ClassRule;
import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -44,43 +42,45 @@
private static final String featureKtClassNamet = kotlinTestClassesPackage + ".FeatureKt";
private static final String baseClassName = kotlinTestClassesPackage + ".Base";
- private static final Map<KotlinTargetVersion, Path> kotlinBaseClasses = new HashMap<>();
- private static final Map<KotlinTargetVersion, Path> kotlinFeatureClasses = new HashMap<>();
+ private static final KotlinCompileMemoizer kotlinBaseClasses =
+ getCompileMemoizer(getKotlinFileInTestPackage(pkg, "base"))
+ .configure(
+ kotlinCompilerTool -> kotlinCompilerTool.addClasspathFiles(getFeatureApiPath()));
+ private static final KotlinCompileMemoizer kotlinFeatureClasses =
+ getCompileMemoizer(getKotlinFileInTestPackage(pkg, "feature"))
+ .configure(
+ kotlinCompilerTool -> {
+ // Compile the feature Kotlin code with the base classes on classpath.
+ kotlinCompilerTool.addClasspathFiles(
+ kotlinBaseClasses.getForConfiguration(
+ kotlinCompilerTool.getCompiler(), kotlinCompilerTool.getTargetVersion()));
+ });
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0},{1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
getTestParameters().withDexRuntimes().withAllApiLevels().build(),
- KotlinTargetVersion.values());
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
- public B148525512(TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ public B148525512(
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- @ClassRule public static TemporaryFolder classTemp = new TemporaryFolder();
-
- @BeforeClass
- public static void compileKotlin() throws Exception {
- // Compile the base Kotlin with the FeatureAPI Java class on classpath.
- Path featureApiJar = classTemp.newFile("feature_api.jar").toPath();
- writeClassesToJar(featureApiJar, FeatureAPI.class);
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path ktBaseClasses =
- kotlinc(KOTLINC, targetVersion)
- .addClasspathFiles(featureApiJar)
- .addSourceFiles(getKotlinFileInTestPackage(pkg, "base"))
- .compile();
- kotlinBaseClasses.put(targetVersion, ktBaseClasses);
- // Compile the feature Kotlin code with the base classes on classpath.
- Path ktFeatureClasses =
- kotlinc(KOTLINC, targetVersion)
- .addClasspathFiles(ktBaseClasses)
- .addSourceFiles(getKotlinFileInTestPackage(pkg, "feature"))
- .compile();
- kotlinFeatureClasses.put(targetVersion, ktFeatureClasses);
+ private static Path getFeatureApiPath() {
+ try {
+ Path featureApiJar = getStaticTemp().getRoot().toPath().resolve("feature_api.jar");
+ if (Files.exists(featureApiJar)) {
+ return featureApiJar;
+ }
+ writeClassesToJar(featureApiJar, FeatureAPI.class);
+ return featureApiJar;
+ } catch (IOException e) {
+ throw new RuntimeException(e);
}
}
@@ -118,8 +118,8 @@
Path featureCode = temp.newFile("feature.zip").toPath();
R8TestCompileResult compileResult =
testForR8(parameters.getBackend())
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(kotlinBaseClasses.get(targetVersion))
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(kotlinBaseClasses.getForConfiguration(kotlinc, targetVersion))
.addProgramClasses(FeatureAPI.class)
.addKeepMainRule(baseKtClassName)
.addKeepClassAndMembersRules(baseClassName)
@@ -134,7 +134,8 @@
builder
.addProgramResourceProvider(
ArchiveResourceProvider.fromArchive(
- kotlinFeatureClasses.get(targetVersion), true))
+ kotlinFeatureClasses.getForConfiguration(kotlinc, targetVersion),
+ true))
.setProgramConsumer(new ArchiveConsumer(featureCode, false))
.build())
.allowDiagnosticWarningMessages()
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaGroupGCLimitTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaGroupGCLimitTest.java
index 73b42ed..323b533 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaGroupGCLimitTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaGroupGCLimitTest.java
@@ -50,7 +50,7 @@
String PKG_NAME = LambdaGroupGCLimitTest.class.getPackage().getName();
R8FullTestBuilder testBuilder =
testForR8(parameters.getBackend())
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(ToolHelper.getKotlinC_1_3_72()))
.setMinApi(parameters.getApiLevel())
.noMinification();
Path classFiles = temp.newFile("classes.jar").toPath();
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaSplitByCodeCorrectnessTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaSplitByCodeCorrectnessTest.java
index 3926dea..4d3f823 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaSplitByCodeCorrectnessTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaSplitByCodeCorrectnessTest.java
@@ -4,10 +4,11 @@
package com.android.tools.r8.kotlin.lambda.b159688129;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertEquals;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestRuntime;
import com.android.tools.r8.TestRuntime.CfRuntime;
@@ -33,17 +34,21 @@
private final KotlinTargetVersion targetVersion;
private final boolean splitGroup;
- @Parameters(name = "{0}, targetVersion: {1}, splitGroup: {2}")
+ @Parameters(name = "{0}, kotlinc: {2} targetVersion: {1}, splitGroup: {3}")
public static List<Object[]> data() {
return buildParameters(
getTestParameters().withDexRuntimes().withAllApiLevels().build(),
KotlinTargetVersion.values(),
+ getKotlinCompilers(),
BooleanUtils.values());
}
public LambdaSplitByCodeCorrectnessTest(
- TestParameters parameters, KotlinTargetVersion targetVersion, boolean splitGroup) {
- super(targetVersion);
+ TestParameters parameters,
+ KotlinTargetVersion targetVersion,
+ KotlinCompiler kotlinc,
+ boolean splitGroup) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
this.targetVersion = targetVersion;
this.splitGroup = splitGroup;
@@ -56,11 +61,11 @@
CfRuntime cfRuntime =
parameters.isCfRuntime() ? parameters.getRuntime().asCf() : TestRuntime.getCheckedInJdk9();
Path ktClasses =
- kotlinc(cfRuntime, KOTLINC, targetVersion)
+ kotlinc(cfRuntime, kotlinc, targetVersion)
.addSourceFiles(getKotlinFileInTest(folder, "Simple"))
.compile();
testForR8(parameters.getBackend())
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.addProgramFiles(ktClasses)
.setMinApi(parameters.getApiLevel())
.addKeepMainRule(PKG_NAME + ".SimpleKt")
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/KotlinMetadataTestBase.java b/src/test/java/com/android/tools/r8/kotlin/metadata/KotlinMetadataTestBase.java
index 99aaf1b..e158fc7 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/KotlinMetadataTestBase.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/KotlinMetadataTestBase.java
@@ -8,6 +8,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertNull;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.kotlin.AbstractR8KotlinTestBase;
import com.android.tools.r8.kotlin.KotlinMetadataWriter;
@@ -21,8 +22,8 @@
public abstract class KotlinMetadataTestBase extends AbstractR8KotlinTestBase {
- public KotlinMetadataTestBase(KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ public KotlinMetadataTestBase(KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
}
static final String PKG = KotlinMetadataTestBase.class.getPackage().getName();
@@ -40,8 +41,8 @@
static final String KT_FUNCTION1 = "Lkotlin/Function1;";
static final String KT_COMPARABLE = "Lkotlin/Comparable;";
- public void assertEqualMetadata(CodeInspector originalInspector, CodeInspector rewrittenInspector)
- throws Exception {
+ public void assertEqualMetadata(
+ CodeInspector originalInspector, CodeInspector rewrittenInspector) {
for (FoundClassSubject clazzSubject : originalInspector.allClasses()) {
ClassSubject r8Clazz = rewrittenInspector.clazz(clazzSubject.getOriginalName());
assertThat(r8Clazz, isPresent());
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 76c2894..31b489a 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
@@ -4,13 +4,14 @@
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
import com.android.tools.r8.JvmTestRunResult;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -19,9 +20,6 @@
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -34,44 +32,36 @@
private static final String PKG_LIB = PKG + ".primitive_type_rewrite_lib";
private static final String PKG_APP = PKG + ".primitive_type_rewrite_app";
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, compiler: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataPrimitiveTypeRewriteTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static Map<KotlinTargetVersion, Path> libJars = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path baseLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(
- getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "lib"))
- .compile();
- libJars.put(targetVersion, baseLibJar);
- }
- }
+ private static final KotlinCompileMemoizer libJars =
+ getCompileMemoizer(
+ getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "lib"));
@Test
public void smokeTest() throws Exception {
- Path libJar = libJars.get(targetVersion);
+ Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG_APP + ".MainKt")
.assertSuccessWithOutputLines(EXPECTED);
@@ -90,7 +80,9 @@
private void runTest(boolean keepUnit) throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addProgramFiles(ToolHelper.getKotlinStdlibJar(), libJars.get(targetVersion))
+ .addProgramFiles(
+ ToolHelper.getKotlinStdlibJar(kotlinc),
+ libJars.getForConfiguration(kotlinc, targetVersion))
.addKeepAllClassesRuleWithAllowObfuscation()
.addKeepRules("-keep class " + PKG_LIB + ".LibKt { *; }")
.addKeepRules("-keep class kotlin.Metadata { *; }")
@@ -107,7 +99,7 @@
equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
@@ -115,7 +107,7 @@
.compile();
final JvmTestRunResult runResult =
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG_APP + ".MainKt");
if (keepUnit) {
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataPrunedFieldsTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataPrunedFieldsTest.java
index 77134d8..a048351 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataPrunedFieldsTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataPrunedFieldsTest.java
@@ -4,23 +4,20 @@
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.kotlin.metadata.metadata_pruned_fields.Main;
import com.android.tools.r8.shaking.ProguardKeepAttributes;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
-import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -31,36 +28,28 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withAllRuntimesAndApiLevels().build(), KotlinTargetVersion.values());
+ getTestParameters().withAllRuntimesAndApiLevels().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
- public MetadataPrunedFieldsTest(TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ public MetadataPrunedFieldsTest(
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static Map<KotlinTargetVersion, Path> libJars = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String baseLibFolder = PKG_PREFIX + "/metadata_pruned_fields";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path baseLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(baseLibFolder, "Methods"))
- .compile();
- libJars.put(targetVersion, baseLibJar);
- }
- }
+ private static final KotlinCompileMemoizer libJars =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/metadata_pruned_fields", "Methods"));
@Test
public void testR8() throws Exception {
testForR8(parameters.getBackend())
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(libJars.get(targetVersion))
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
.addProgramClassFileData(Main.dump())
.addKeepRules("-keep class " + PKG + ".metadata_pruned_fields.MethodsKt { *; }")
.addKeepRules("-keep class kotlin.Metadata { *** pn(); }")
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAllowAccessModificationTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAllowAccessModificationTest.java
index 549f834..ea9ed33 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAllowAccessModificationTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAllowAccessModificationTest.java
@@ -4,12 +4,13 @@
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static junit.framework.TestCase.assertEquals;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.StringContains.containsString;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -21,9 +22,6 @@
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -54,53 +52,40 @@
"staticPrivate",
"staticInternal");
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteAllowAccessModificationTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static Map<KotlinTargetVersion, Path> libJars = new HashMap<>();
- private static Map<KotlinTargetVersion, Path> libReferenceJars = new HashMap<>();
+ private static final KotlinCompileMemoizer libJars =
+ getCompileMemoizer(
+ getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "lib"));
+ private static final KotlinCompileMemoizer libReferenceJars =
+ getCompileMemoizer(
+ getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "lib_reference"));
private final TestParameters parameters;
- @BeforeClass
- public static void createLibJar() throws Exception {
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- libJars.put(
- targetVersion,
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(
- getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "lib"))
- .compile());
- libReferenceJars.put(
- targetVersion,
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(
- getKotlinFileInTest(
- DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "lib_reference"))
- .compile());
- }
- }
-
@Test
public void smokeTest() throws Exception {
- Path libJar = libReferenceJars.get(targetVersion);
+ Path libJar = libReferenceJars.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG_APP + ".MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -113,7 +98,7 @@
// running with R8, the output should be binary compatible with libReference.
Path libJar =
testForR8(parameters.getBackend())
- .addProgramFiles(libJars.get(targetVersion))
+ .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
.addKeepRules("-keepclassmembers,allowaccessmodification class **.Lib { *; }")
.addKeepRules("-keep,allowaccessmodification,allowobfuscation class **.Lib { *; }")
.addKeepRules("-keepclassmembers,allowaccessmodification class **.Lib$Comp { *; }")
@@ -134,7 +119,7 @@
.inspect(this::inspect)
.writeToZip();
ProcessResult mainResult =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
@@ -144,7 +129,7 @@
assertThat(mainResult.stderr, containsString("cannot access 'LibReference'"));
}
- private void inspect(CodeInspector inspector) throws Exception {
+ private void inspect(CodeInspector inspector) {
// TODO(b/154348683): Assert equality between LibReference and Lib.
// assertEqualMetadata(new CodeInspector(libReferenceJars.get(targetVersion)), inspector);
ClassSubject lib = inspector.clazz(PKG_LIB + ".Lib");
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnnotationTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnnotationTest.java
index 0b65d77..428103f 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnnotationTest.java
@@ -4,13 +4,14 @@
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -22,12 +23,10 @@
import com.android.tools.r8.utils.codeinspector.KmTypeAliasSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.Map;
import kotlinx.metadata.KmAnnotation;
import kotlinx.metadata.KmAnnotationArgument;
import kotlinx.metadata.KmAnnotationArgument.ArrayValue;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -59,38 +58,30 @@
private static final String FOO_ORIGINAL_NAME = PKG_LIB + ".Foo";
private static final String FOO_FINAL_NAME = "a.b.c";
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteAnnotationTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static Map<KotlinTargetVersion, Path> libJars = new HashMap<>();
+ private static final KotlinCompileMemoizer libJars =
+ getCompileMemoizer(
+ getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "lib"));
private final TestParameters parameters;
- @BeforeClass
- public static void createLibJar() throws Exception {
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path baseLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(
- getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "lib"))
- .compile();
- libJars.put(targetVersion, baseLibJar);
- }
- }
-
@Test
public void smokeTest() throws Exception {
- Path libJar = libJars.get(targetVersion);
+ Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
@@ -98,7 +89,7 @@
.compile();
testForJvm()
.addRunClasspathFiles(
- ToolHelper.getKotlinStdlibJar(), ToolHelper.getKotlinReflectJar(), libJar)
+ ToolHelper.getKotlinStdlibJar(kotlinc), ToolHelper.getKotlinReflectJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG_APP + ".MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -108,7 +99,7 @@
public void testMetadataForLib() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addProgramFiles(libJars.get(targetVersion))
+ .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
/// Keep the annotations
.addKeepClassAndMembersRules(PKG_LIB + ".AnnoWithClassAndEnum")
.addKeepClassAndMembersRules(PKG_LIB + ".AnnoWithClassArr")
@@ -134,14 +125,14 @@
.inspect(this::inspect)
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
.compile();
testForJvm()
.addRunClasspathFiles(
- ToolHelper.getKotlinStdlibJar(), ToolHelper.getKotlinReflectJar(), libJar)
+ ToolHelper.getKotlinStdlibJar(kotlinc), ToolHelper.getKotlinReflectJar(kotlinc), libJar)
.addProgramFiles(output)
.run(parameters.getRuntime(), PKG_APP + ".MainKt")
.assertSuccessWithOutput(EXPECTED.replace(FOO_ORIGINAL_NAME, FOO_FINAL_NAME));
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnonymousTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnonymousTest.java
index 14cbe0b..0ff40ff 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnonymousTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnonymousTest.java
@@ -4,10 +4,11 @@
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
import static org.hamcrest.MatcherAssert.assertThat;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -17,9 +18,6 @@
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -29,45 +27,36 @@
private final String EXPECTED = "foo";
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteAnonymousTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static Map<KotlinTargetVersion, Path> libJars = new HashMap<>();
+ private static final KotlinCompileMemoizer libJars =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/anonymous_lib", "lib"));
private final TestParameters parameters;
- @BeforeClass
- public static void createLibJar() throws Exception {
- String baseLibFolder = PKG_PREFIX + "/anonymous_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path baseLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(baseLibFolder, "lib"))
- .compile();
- libJars.put(targetVersion, baseLibJar);
- }
- }
-
@Test
public void smokeTest() throws Exception {
- Path libJar = libJars.get(targetVersion);
+ Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/anonymous_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".anonymous_app.MainKt")
.assertSuccessWithOutputLines(EXPECTED);
@@ -77,8 +66,8 @@
public void testMetadataForLib() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(libJars.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
.addKeepAllClassesRuleWithAllowObfuscation()
.addKeepRules("-keep class " + PKG + ".anonymous_lib.Test$A { *; }")
.addKeepRules("-keep class " + PKG + ".anonymous_lib.Test { *; }")
@@ -91,13 +80,13 @@
.inspect(this::inspect)
.writeToZip();
Path main =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/anonymous_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(main)
.run(parameters.getRuntime(), PKG + ".anonymous_app.MainKt")
.assertSuccessWithOutputLines(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteBoxedTypesTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteBoxedTypesTest.java
index 06d2636..2c2ae83 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteBoxedTypesTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteBoxedTypesTest.java
@@ -4,13 +4,14 @@
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertNotNull;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertNull;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -23,12 +24,9 @@
import java.io.IOException;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
import java.util.concurrent.ExecutionException;
import kotlinx.metadata.jvm.KotlinClassHeader;
import kotlinx.metadata.jvm.KotlinClassMetadata;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -39,44 +37,35 @@
private final String EXPECTED =
StringUtils.lines("false", "0", "a", "0.042", "0.42", "42", "442", "1", "2", "42", "42");
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteBoxedTypesTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static Map<KotlinTargetVersion, Path> libJars = new HashMap<>();
+ private static final KotlinCompileMemoizer libJars =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/box_primitives_lib", "lib"));
private final TestParameters parameters;
- @BeforeClass
- public static void createLibJar() throws Exception {
- String baseLibFolder = PKG_PREFIX + "/box_primitives_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path baseLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(baseLibFolder, "lib"))
- .compile();
- libJars.put(targetVersion, baseLibJar);
- }
- }
-
@Test
public void smokeTest() throws Exception {
- Path libJar = libJars.get(targetVersion);
+ Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/box_primitives_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".box_primitives_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -84,9 +73,9 @@
@Test
public void smokeTestReflection() throws Exception {
- Path libJar = libJars.get(targetVersion);
+ Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/box_primitives_app", "main_reflect"))
.setOutputPath(temp.newFolder().toPath())
@@ -94,7 +83,7 @@
testForJvm()
.addVmArguments("-ea")
.addRunClasspathFiles(
- ToolHelper.getKotlinStdlibJar(), ToolHelper.getKotlinReflectJar(), libJar)
+ ToolHelper.getKotlinStdlibJar(kotlinc), ToolHelper.getKotlinReflectJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".box_primitives_app.Main_reflectKt")
.assertSuccessWithOutput(EXPECTED);
@@ -104,8 +93,8 @@
public void testMetadataForLib() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(libJars.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
.addKeepAllClassesRule()
.addKeepAttributes(
ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS,
@@ -116,14 +105,14 @@
.inspect(this::inspect)
.writeToZip();
Path main =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/box_primitives_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
.addRunClasspathFiles(
- ToolHelper.getKotlinStdlibJar(), ToolHelper.getKotlinReflectJar(), libJar)
+ ToolHelper.getKotlinStdlibJar(kotlinc), ToolHelper.getKotlinReflectJar(kotlinc), libJar)
.addClasspath(main)
.run(parameters.getRuntime(), PKG + ".box_primitives_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -132,7 +121,8 @@
private void inspect(CodeInspector inspector) throws IOException, ExecutionException {
// Since this has a keep-all classes rule, we should just assert that the meta-data is equal to
// the original one.
- CodeInspector stdLibInspector = new CodeInspector(libJars.get(targetVersion));
+ CodeInspector stdLibInspector =
+ new CodeInspector(libJars.getForConfiguration(kotlinc, targetVersion));
for (FoundClassSubject clazzSubject : stdLibInspector.allClasses()) {
ClassSubject r8Clazz = inspector.clazz(clazzSubject.getOriginalName());
assertThat(r8Clazz, isPresent());
@@ -159,8 +149,8 @@
public void testMetadataForReflect() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(libJars.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
.addKeepAllClassesRule()
.addKeepAttributes(
ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS,
@@ -170,7 +160,7 @@
.compile()
.writeToZip();
Path main =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/box_primitives_app", "main_reflect"))
.setOutputPath(temp.newFolder().toPath())
@@ -178,7 +168,7 @@
testForJvm()
.addVmArguments("-ea")
.addRunClasspathFiles(
- ToolHelper.getKotlinStdlibJar(), ToolHelper.getKotlinReflectJar(), libJar)
+ ToolHelper.getKotlinStdlibJar(kotlinc), ToolHelper.getKotlinReflectJar(kotlinc), libJar)
.addClasspath(main)
.run(parameters.getRuntime(), PKG + ".box_primitives_app.Main_reflectKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineAnonFunctionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineAnonFunctionTest.java
index 1ebdddb..56fd483 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineAnonFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineAnonFunctionTest.java
@@ -4,8 +4,9 @@
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -13,9 +14,6 @@
import com.android.tools.r8.utils.StringUtils;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -27,45 +25,37 @@
private static final String PKG_LIB = PKG + ".crossinline_anon_lib";
private static final String PKG_APP = PKG + ".crossinline_anon_app";
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteCrossinlineAnonFunctionTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static Map<KotlinTargetVersion, Path> libJars = new HashMap<>();
+ private static final KotlinCompileMemoizer libJars =
+ getCompileMemoizer(
+ getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "lib"));
private final TestParameters parameters;
- @BeforeClass
- public static void createLibJar() throws Exception {
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path baseLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(
- getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "lib"))
- .compile();
- libJars.put(targetVersion, baseLibJar);
- }
- }
-
@Test
public void smokeTest() throws Exception {
- Path libJar = libJars.get(targetVersion);
+ Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG_APP + ".MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -75,19 +65,19 @@
public void testMetadataForLib() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addProgramFiles(libJars.get(targetVersion))
+ .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
.addKeepAllClassesRule()
.addKeepAllAttributes()
.compile()
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addProgramFiles(output)
.run(parameters.getRuntime(), PKG_APP + ".MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineConcreteFunctionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineConcreteFunctionTest.java
index ce26b77..b8c5ac2 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineConcreteFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineConcreteFunctionTest.java
@@ -4,8 +4,9 @@
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -13,9 +14,6 @@
import com.android.tools.r8.utils.StringUtils;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -27,45 +25,37 @@
private static final String PKG_LIB = PKG + ".crossinline_concrete_lib";
private static final String PKG_APP = PKG + ".crossinline_concrete_app";
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteCrossinlineConcreteFunctionTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static Map<KotlinTargetVersion, Path> libJars = new HashMap<>();
+ private static final KotlinCompileMemoizer libJars =
+ getCompileMemoizer(
+ getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "lib"));
private final TestParameters parameters;
- @BeforeClass
- public static void createLibJar() throws Exception {
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path baseLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(
- getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "lib"))
- .compile();
- libJars.put(targetVersion, baseLibJar);
- }
- }
-
@Test
public void smokeTest() throws Exception {
- Path libJar = libJars.get(targetVersion);
+ Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG_APP + ".MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -75,20 +65,20 @@
public void testMetadataForLib() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addProgramFiles(libJars.get(targetVersion))
+ .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
.addKeepAllClassesRule()
.addKeepAllAttributes()
.compile()
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG_APP + ".MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
index badbf02..d71248e 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
@@ -4,8 +4,9 @@
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -15,9 +16,6 @@
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -35,38 +33,31 @@
"null",
"New value has been read in CustomDelegate from 'x'");
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteDelegatedPropertyTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
private final TestParameters parameters;
- private static Map<KotlinTargetVersion, Path> jars = new HashMap<>();
-
- @BeforeClass
- public static void createJar() throws Exception {
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path baseLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(
- getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
- .compile();
- jars.put(targetVersion, baseLibJar);
- }
- }
+ private static final KotlinCompileMemoizer jars =
+ getCompileMemoizer(
+ getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"));
@Test
public void smokeTest() throws Exception {
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), ToolHelper.getKotlinReflectJar())
- .addClasspath(jars.get(targetVersion))
+ .addRunClasspathFiles(
+ ToolHelper.getKotlinStdlibJar(kotlinc), ToolHelper.getKotlinReflectJar(kotlinc))
+ .addClasspath(jars.getForConfiguration(kotlinc, targetVersion))
.run(parameters.getRuntime(), PKG_APP + ".MainKt")
.assertSuccessWithOutput(EXPECTED_MAIN);
}
@@ -76,17 +67,20 @@
public void testMetadataForLib() throws Exception {
Path outputJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(jars.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(jars.getForConfiguration(kotlinc, targetVersion))
.addKeepAllClassesRule()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
.compile()
.inspect(
inspector ->
- assertEqualMetadata(new CodeInspector(jars.get(targetVersion)), inspector))
+ assertEqualMetadata(
+ new CodeInspector(jars.getForConfiguration(kotlinc, targetVersion)),
+ inspector))
.writeToZip();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), ToolHelper.getKotlinReflectJar())
+ .addRunClasspathFiles(
+ ToolHelper.getKotlinStdlibJar(kotlinc), ToolHelper.getKotlinReflectJar(kotlinc))
.addClasspath(outputJar)
.run(parameters.getRuntime(), PKG_APP + ".MainKt")
.assertSuccessWithOutput(EXPECTED_MAIN);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDependentKeep.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDependentKeep.java
index a8fcf61..15112f6 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDependentKeep.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDependentKeep.java
@@ -4,10 +4,12 @@
package com.android.tools.r8.kotlin.metadata;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -25,24 +27,26 @@
@RunWith(Parameterized.class)
public class MetadataRewriteDependentKeep extends KotlinMetadataTestBase {
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
private final TestParameters parameters;
public MetadataRewriteDependentKeep(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
@Test
public void testR8() throws CompilationFailedException, IOException, ExecutionException {
testForR8(parameters.getBackend())
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.setMinApi(parameters.getApiLevel())
.addKeepKotlinMetadata()
.addKeepRules(StringUtils.joinLines("-if class *.Metadata", "-keep class <1>.io.** { *; }"))
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDoNotEmitValuesIfEmpty.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDoNotEmitValuesIfEmpty.java
index 788e64b..fb4dab9 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDoNotEmitValuesIfEmpty.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDoNotEmitValuesIfEmpty.java
@@ -4,9 +4,11 @@
package com.android.tools.r8.kotlin.metadata;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -27,24 +29,26 @@
private final Set<String> nullableFieldKeys = Sets.newHashSet("pn", "xs", "xi");
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
private final TestParameters parameters;
public MetadataRewriteDoNotEmitValuesIfEmpty(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
@Test
public void testKotlinStdLib() throws Exception {
testForR8(parameters.getBackend())
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.setMinApi(parameters.getApiLevel())
.addKeepAllClassesRule()
.addKeepKotlinMetadata()
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteFlexibleUpperBoundTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteFlexibleUpperBoundTest.java
index d5b9fd0..ecaea79 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteFlexibleUpperBoundTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteFlexibleUpperBoundTest.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
@@ -12,6 +12,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -25,12 +26,9 @@
import java.io.IOException;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import java.util.concurrent.ExecutionException;
import kotlinx.metadata.KmFlexibleTypeUpperBound;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -41,44 +39,35 @@
private final String EXPECTED = StringUtils.lines("B.foo(): 42");
private final String PKG_LIB = PKG + ".flexible_upper_bound_lib";
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteFlexibleUpperBoundTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static Map<KotlinTargetVersion, Path> libJars = new HashMap<>();
+ private static final KotlinCompileMemoizer libJars =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/flexible_upper_bound_lib", "lib"));
private final TestParameters parameters;
- @BeforeClass
- public static void createLibJar() throws Exception {
- String baseLibFolder = PKG_PREFIX + "/flexible_upper_bound_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path baseLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(baseLibFolder, "lib"))
- .compile();
- libJars.put(targetVersion, baseLibJar);
- }
- }
-
@Test
public void smokeTest() throws Exception {
- Path libJar = libJars.get(targetVersion);
+ Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/flexible_upper_bound_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".flexible_upper_bound_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -88,8 +77,8 @@
public void testMetadataForLib() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(libJars.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
// Allow renaming A to ensure that we rename in the flexible upper bound type.
.addKeepRules("-keep,allowobfuscation class " + PKG_LIB + ".A { *; }")
.addKeepRules("-keep class " + PKG_LIB + ".B { *; }")
@@ -103,14 +92,14 @@
.inspect(this::inspect)
.writeToZip();
Path main =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/flexible_upper_bound_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
.addRunClasspathFiles(
- ToolHelper.getKotlinStdlibJar(), ToolHelper.getKotlinReflectJar(), libJar)
+ ToolHelper.getKotlinStdlibJar(kotlinc), ToolHelper.getKotlinReflectJar(kotlinc), libJar)
.addClasspath(main)
.run(parameters.getRuntime(), PKG + ".flexible_upper_bound_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInClasspathTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInClasspathTypeTest.java
index 2103f0d..09d3af7 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInClasspathTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInClasspathTypeTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isExtensionFunction;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
@@ -11,6 +11,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -23,10 +24,7 @@
import com.android.tools.r8.utils.codeinspector.KmPackageSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -37,54 +35,45 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInClasspathTypeTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> baseLibJarMap = new HashMap<>();
- private static final Map<KotlinTargetVersion, Path> extLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String baseLibFolder = PKG_PREFIX + "/classpath_lib_base";
- String extLibFolder = PKG_PREFIX + "/classpath_lib_ext";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path baseLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(baseLibFolder, "itf"))
- .compile();
- Path extLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addClasspathFiles(baseLibJar)
- .addSourceFiles(getKotlinFileInTest(extLibFolder, "impl"))
- .compile();
- baseLibJarMap.put(targetVersion, baseLibJar);
- extLibJarMap.put(targetVersion, extLibJar);
- }
- }
+ private static final KotlinCompileMemoizer baseLibJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/classpath_lib_base", "itf"));
+ private static final KotlinCompileMemoizer extLibJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/classpath_lib_ext", "impl"))
+ .configure(
+ kotlinCompilerTool -> {
+ kotlinCompilerTool.addClasspathFiles(
+ baseLibJarMap.getForConfiguration(
+ kotlinCompilerTool.getCompiler(), kotlinCompilerTool.getTargetVersion()));
+ });
@Test
public void smokeTest() throws Exception {
- Path baseLibJar = baseLibJarMap.get(targetVersion);
- Path extLibJar = extLibJarMap.get(targetVersion);
+ Path baseLibJar = baseLibJarMap.getForConfiguration(kotlinc, targetVersion);
+ Path extLibJar = extLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(baseLibJar, extLibJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/classpath_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), baseLibJar, extLibJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), baseLibJar, extLibJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".classpath_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -92,11 +81,11 @@
@Test
public void testMetadataInClasspathType_renamed() throws Exception {
- Path baseLibJar = baseLibJarMap.get(targetVersion);
+ Path baseLibJar = baseLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(baseLibJar, ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(extLibJarMap.get(targetVersion))
+ .addClasspathFiles(baseLibJar, ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(extLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep the Extra class and its interface (which has the method).
.addKeepRules("-keep class **.Extra")
// Keep Super, but allow minification.
@@ -110,14 +99,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(baseLibJar, libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/classpath_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), baseLibJar, libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), baseLibJar, libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".classpath_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInCompanionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInCompanionTest.java
index 4c49518..d025713 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInCompanionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInCompanionTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
@@ -12,6 +12,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -25,10 +26,7 @@
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -46,45 +44,36 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInCompanionTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static Map<KotlinTargetVersion, Path> companionLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String companionLibFolder = PKG_PREFIX + "/companion_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path companionLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(companionLibFolder, "lib"))
- .compile();
- companionLibJarMap.put(targetVersion, companionLibJar);
- }
- }
+ private static final KotlinCompileMemoizer companionLibJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/companion_lib", "lib"));
@Test
public void smokeTest() throws Exception {
- Path libJar = companionLibJarMap.get(targetVersion);
+ Path libJar = companionLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/companion_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".companion_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -94,8 +83,8 @@
public void testMetadataInCompanion_kept() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(companionLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(companionLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep everything
.addKeepRules("-keep class **.companion_lib.** { *; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
@@ -109,14 +98,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/companion_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".companion_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -126,8 +115,8 @@
public void testMetadataInCompanion_renamed() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(companionLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(companionLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep the B class and its interface (which has the doStuff method).
.addKeepRules("-keep class **.B")
// Property in companion with @JvmField is defined in the host class, without accessors.
@@ -151,14 +140,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/companion_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".companion_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionFunctionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionFunctionTest.java
index 4f8b4a4..ac363d4 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionFunctionTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isExtensionFunction;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
@@ -13,6 +13,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -28,10 +29,7 @@
import com.android.tools.r8.utils.codeinspector.KmValueParameterSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -43,45 +41,36 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInExtensionFunctionTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> extLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String extLibFolder = PKG_PREFIX + "/extension_function_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path extLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(extLibFolder, "B"))
- .compile();
- extLibJarMap.put(targetVersion, extLibJar);
- }
- }
+ private static final KotlinCompileMemoizer extLibJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/extension_function_lib", "B"));
@Test
public void smokeTest() throws Exception {
- Path libJar = extLibJarMap.get(targetVersion);
+ Path libJar = extLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/extension_function_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".extension_function_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -92,7 +81,7 @@
public void testMetadataInExtensionFunction_merged() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addProgramFiles(extLibJarMap.get(targetVersion))
+ .addProgramFiles(extLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep the B class and its interface (which has the doStuff method).
.addKeepRules("-keep class **.B")
.addKeepRules("-keep class **.I { <methods>; }")
@@ -108,14 +97,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/extension_function_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".extension_function_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -143,8 +132,8 @@
public void testMetadataInExtensionFunction_renamed() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(extLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(extLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep the B class and its interface (which has the doStuff method).
.addKeepRules("-keep class **.B")
.addKeepRules("-keep class **.I { <methods>; }")
@@ -162,14 +151,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/extension_function_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".extension_function_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionPropertyTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionPropertyTest.java
index 9e81bf2..327ec34 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionPropertyTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionPropertyTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isExtensionFunction;
import static com.android.tools.r8.utils.codeinspector.Matchers.isExtensionProperty;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
@@ -14,6 +14,7 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -27,10 +28,7 @@
import com.android.tools.r8.utils.codeinspector.KmPropertySubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -42,45 +40,36 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInExtensionPropertyTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> extLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String extLibFolder = PKG_PREFIX + "/extension_property_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path extLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(extLibFolder, "B"))
- .compile();
- extLibJarMap.put(targetVersion, extLibJar);
- }
- }
+ private static final KotlinCompileMemoizer extLibJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/extension_property_lib", "B"));
@Test
public void smokeTest() throws Exception {
- Path libJar = extLibJarMap.get(targetVersion);
+ Path libJar = extLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/extension_property_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".extension_property_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -91,7 +80,7 @@
public void testMetadataInExtensionProperty_merged() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addProgramFiles(extLibJarMap.get(targetVersion))
+ .addProgramFiles(extLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep the B class and its interface (which has the doStuff method).
.addKeepRules("-keep class **.B")
.addKeepRules("-keep class **.I { <methods>; }")
@@ -104,14 +93,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/extension_property_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".extension_property_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -151,8 +140,8 @@
public void testMetadataInExtensionProperty_renamed() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(extLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(extLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep the B class and its interface (which has the doStuff method).
.addKeepRules("-keep class **.B")
.addKeepRules("-keep class **.I { <methods>; }")
@@ -167,14 +156,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/extension_property_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".extension_property_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
index dcb6dbe..91ed797 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isExtensionFunction;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
@@ -13,6 +13,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -26,10 +27,7 @@
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -41,45 +39,36 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0} target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInFunctionTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> funLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String funLibFolder = PKG_PREFIX + "/function_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path funLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(funLibFolder, "B"))
- .compile();
- funLibJarMap.put(targetVersion, funLibJar);
- }
- }
+ private static final KotlinCompileMemoizer funLibJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/function_lib", "B"));
@Test
public void smokeTest() throws Exception {
- Path libJar = funLibJarMap.get(targetVersion);
+ Path libJar = funLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/function_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".function_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -90,7 +79,7 @@
public void testMetadataInFunction_merged() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addProgramFiles(funLibJarMap.get(targetVersion))
+ .addProgramFiles(funLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep the B class and its interface (which has the doStuff method).
.addKeepRules("-keep class **.B")
.addKeepRules("-keep class **.I { <methods>; }")
@@ -102,14 +91,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/function_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".function_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -148,8 +137,8 @@
public void testMetadataInFunction_renamed() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(funLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(funLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep the B class and its interface (which has the doStuff method).
.addKeepRules("-keep class **.B")
.addKeepRules("-keep class **.I { <methods>; }")
@@ -163,14 +152,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/function_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".function_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithDefaultValueTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithDefaultValueTest.java
index 4cd9b6a..c9210a1 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithDefaultValueTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithDefaultValueTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isExtensionFunction;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
@@ -12,6 +12,7 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -27,10 +28,7 @@
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -41,45 +39,36 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInFunctionWithDefaultValueTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static Map<KotlinTargetVersion, Path> defaultValueLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String default_valueLibFolder = PKG_PREFIX + "/default_value_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path default_valueLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(default_valueLibFolder, "lib"))
- .compile();
- defaultValueLibJarMap.put(targetVersion, default_valueLibJar);
- }
- }
+ private static final KotlinCompileMemoizer defaultValueLibJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/default_value_lib", "lib"));
@Test
public void smokeTest() throws Exception {
- Path libJar = defaultValueLibJarMap.get(targetVersion);
+ Path libJar = defaultValueLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/default_value_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".default_value_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -89,8 +78,9 @@
public void testMetadataInFunctionWithDefaultValue() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addLibraryFiles(ToolHelper.getJava8RuntimeJar(), ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(defaultValueLibJarMap.get(targetVersion))
+ .addLibraryFiles(
+ ToolHelper.getJava8RuntimeJar(), ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(defaultValueLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep LibKt and applyMap function, along with applyMap$default
.addKeepRules("-keep class **.LibKt { *** applyMap*(...); }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
@@ -102,14 +92,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/default_value_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".default_value_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithVarargTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithVarargTest.java
index 0914a23..a65c4b9 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithVarargTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithVarargTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isExtensionFunction;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
@@ -13,6 +13,7 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -28,10 +29,7 @@
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -42,45 +40,36 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInFunctionWithVarargTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static Map<KotlinTargetVersion, Path> varargLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String varargLibFolder = PKG_PREFIX + "/vararg_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path varargLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(varargLibFolder, "lib"))
- .compile();
- varargLibJarMap.put(targetVersion, varargLibJar);
- }
- }
+ private static final KotlinCompileMemoizer varargLibJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/vararg_lib", "lib"));
@Test
public void smokeTest() throws Exception {
- Path libJar = varargLibJarMap.get(targetVersion);
+ Path libJar = varargLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/vararg_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".vararg_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -90,8 +79,8 @@
public void testMetadataInFunctionWithVararg() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(varargLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(varargLibJarMap.getForConfiguration(kotlinc, targetVersion))
// keep SomeClass#foo, since there is a method reference in the app.
.addKeepRules("-keep class **.SomeClass { *** foo(...); }")
// Keep LibKt, along with bar function.
@@ -105,14 +94,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/vararg_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".vararg_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInLibraryTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInLibraryTypeTest.java
index 159bf66..e635091 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInLibraryTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInLibraryTypeTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
import static org.hamcrest.CoreMatchers.anyOf;
@@ -11,6 +11,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -21,9 +22,6 @@
import com.android.tools.r8.utils.codeinspector.KmPackageSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -34,54 +32,51 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInLibraryTypeTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> baseLibJarMap = new HashMap<>();
- private static final Map<KotlinTargetVersion, Path> extLibJarMap = new HashMap<>();
- private static final Map<KotlinTargetVersion, Path> appJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String baseLibFolder = PKG_PREFIX + "/libtype_lib_base";
- String extLibFolder = PKG_PREFIX + "/libtype_lib_ext";
- String appFolder = PKG_PREFIX + "/libtype_app";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path baseLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(baseLibFolder, "base"))
- .compile();
- Path extLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addClasspathFiles(baseLibJar)
- .addSourceFiles(getKotlinFileInTest(extLibFolder, "ext"))
- .compile();
- Path appJar =
- kotlinc(KOTLINC, targetVersion)
- .addClasspathFiles(baseLibJar)
- .addClasspathFiles(extLibJar)
- .addSourceFiles(getKotlinFileInTest(appFolder, "main"))
- .compile();
- baseLibJarMap.put(targetVersion, baseLibJar);
- extLibJarMap.put(targetVersion, extLibJar);
- appJarMap.put(targetVersion, appJar);
- }
- }
+ private static final KotlinCompileMemoizer baseLibJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/libtype_lib_base", "base"));
+ private static final KotlinCompileMemoizer extLibJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/libtype_lib_ext", "ext"))
+ .configure(
+ kotlinCompilerTool -> {
+ kotlinCompilerTool.addClasspathFiles(
+ baseLibJarMap.getForConfiguration(
+ kotlinCompilerTool.getCompiler(), kotlinCompilerTool.getTargetVersion()));
+ });
+ private static final KotlinCompileMemoizer appJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/libtype_app", "main"))
+ .configure(
+ kotlinCompilerTool -> {
+ kotlinCompilerTool.addClasspathFiles(
+ baseLibJarMap.getForConfiguration(
+ kotlinCompilerTool.getCompiler(), kotlinCompilerTool.getTargetVersion()));
+ kotlinCompilerTool.addClasspathFiles(
+ extLibJarMap.getForConfiguration(
+ kotlinCompilerTool.getCompiler(), kotlinCompilerTool.getTargetVersion()));
+ });
@Test
public void smokeTest() throws Exception {
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), baseLibJarMap.get(targetVersion))
- .addClasspath(extLibJarMap.get(targetVersion), appJarMap.get(targetVersion))
+ .addRunClasspathFiles(
+ ToolHelper.getKotlinStdlibJar(kotlinc),
+ baseLibJarMap.getForConfiguration(kotlinc, targetVersion))
+ .addClasspath(
+ extLibJarMap.getForConfiguration(kotlinc, targetVersion),
+ appJarMap.getForConfiguration(kotlinc, targetVersion))
.run(parameters.getRuntime(), PKG + ".libtype_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
}
@@ -93,7 +88,9 @@
testForR8(parameters.getBackend())
// Intentionally not providing baseLibJar as lib file nor classpath file.
.addClasspathFiles()
- .addProgramFiles(extLibJarMap.get(targetVersion), appJarMap.get(targetVersion))
+ .addProgramFiles(
+ extLibJarMap.getForConfiguration(kotlinc, targetVersion),
+ appJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep Ext extension method which requires metadata to be called with Kotlin syntax
// from other kotlin code.
.addKeepRules("-keep class **.ExtKt { <methods>; }")
@@ -112,7 +109,9 @@
.writeToZip();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), baseLibJarMap.get(targetVersion))
+ .addRunClasspathFiles(
+ ToolHelper.getKotlinStdlibJar(kotlinc),
+ baseLibJarMap.getForConfiguration(kotlinc, targetVersion))
.addClasspath(out)
.run(parameters.getRuntime(), main)
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java
index 45a419d..8adeb48 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isExtensionFunction;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
@@ -16,6 +16,7 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -31,11 +32,8 @@
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import kotlinx.metadata.jvm.KotlinClassMetadata;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -46,47 +44,38 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInMultifileClassTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> multifileLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String multifileLibFolder = PKG_PREFIX + "/multifileclass_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path multifileLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(
- getKotlinFileInTest(multifileLibFolder, "signed"),
- getKotlinFileInTest(multifileLibFolder, "unsigned"))
- .compile();
- multifileLibJarMap.put(targetVersion, multifileLibJar);
- }
- }
+ private static final KotlinCompileMemoizer multifileLibJarMap =
+ getCompileMemoizer(
+ getKotlinFileInTest(PKG_PREFIX + "/multifileclass_lib", "signed"),
+ getKotlinFileInTest(PKG_PREFIX + "/multifileclass_lib", "unsigned"));
@Test
public void smokeTest() throws Exception {
- Path libJar = multifileLibJarMap.get(targetVersion);
+ Path libJar = multifileLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/multifileclass_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".multifileclass_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -96,8 +85,8 @@
public void testMetadataInMultifileClass_merged() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(multifileLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(multifileLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep UtilKt#comma*Join*(). Let R8 optimize (inline) others, such as joinOf*(String).
.addKeepRules("-keep class **.UtilKt")
.addKeepRules("-keepclassmembers class * { ** comma*Join*(...); }")
@@ -107,7 +96,7 @@
.writeToZip();
ProcessResult kotlinTestCompileResult =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/multifileclass_app", "main"))
.setOutputPath(temp.newFolder().toPath())
@@ -137,8 +126,8 @@
public void testMetadataInMultifileClass_renamed() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(multifileLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(multifileLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep UtilKt#comma*Join*().
.addKeepRules("-keep class **.UtilKt")
.addKeepRules("-keep,allowobfuscation class **.UtilKt__SignedKt")
@@ -151,7 +140,7 @@
.writeToZip();
ProcessResult kotlinTestCompileResult =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/multifileclass_app", "main"))
.setOutputPath(temp.newFolder().toPath())
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInNestedClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInNestedClassTest.java
index eada4da..8bb4603 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInNestedClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInNestedClassTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.DescriptorUtils.descriptorToJavaType;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
@@ -12,6 +12,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -22,9 +23,6 @@
import com.android.tools.r8.utils.codeinspector.KmClassSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -36,45 +34,36 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInNestedClassTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> nestedLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String nestedLibFolder = PKG_PREFIX + "/nested_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path nestedLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(nestedLibFolder, "lib"))
- .compile();
- nestedLibJarMap.put(targetVersion, nestedLibJar);
- }
- }
+ private static final KotlinCompileMemoizer nestedLibJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/nested_lib", "lib"));
@Test
public void smokeTest() throws Exception {
- Path libJar = nestedLibJarMap.get(targetVersion);
+ Path libJar = nestedLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/nested_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".nested_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -84,8 +73,8 @@
public void testMetadataInNestedClass() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(nestedLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(nestedLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep the Outer class and delegations.
.addKeepRules("-keep class **.Outer { <init>(...); *** delegate*(...); }")
// Keep Inner to check the hierarchy.
@@ -100,14 +89,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/nested_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".nested_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInParameterTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInParameterTypeTest.java
index b4ae665..a2a85c3 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInParameterTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInParameterTypeTest.java
@@ -3,13 +3,14 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -20,10 +21,7 @@
import com.android.tools.r8.utils.codeinspector.KmClassSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -34,45 +32,36 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInParameterTypeTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> parameterTypeLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String parameterTypeLibFolder = PKG_PREFIX + "/parametertype_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path parameterTypeLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(parameterTypeLibFolder, "lib"))
- .compile();
- parameterTypeLibJarMap.put(targetVersion, parameterTypeLibJar);
- }
- }
+ private static final KotlinCompileMemoizer parameterTypeLibJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/parametertype_lib", "lib"));
@Test
public void smokeTest() throws Exception {
- Path libJar = parameterTypeLibJarMap.get(targetVersion);
+ Path libJar = parameterTypeLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/parametertype_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".parametertype_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -82,8 +71,8 @@
public void testMetadataInParameterType_renamed() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(parameterTypeLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(parameterTypeLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep non-private members of Impl
.addKeepRules("-keep public class **.Impl { !private *; }")
// Keep Itf, but allow minification.
@@ -94,14 +83,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/parametertype_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".parametertype_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTest.java
index c479093..d012f10 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isExtensionProperty;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
@@ -14,6 +14,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -27,9 +28,6 @@
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -40,38 +38,29 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInPropertyTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> propertyTypeLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String propertyTypeLibFolder = PKG_PREFIX + "/fragile_property_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path propertyTypeLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(propertyTypeLibFolder, "lib"))
- .compile();
- propertyTypeLibJarMap.put(targetVersion, propertyTypeLibJar);
- }
- }
+ private static final KotlinCompileMemoizer propertyTypeLibJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/fragile_property_lib", "lib"));
@Test
public void smokeTest_getterApp() throws Exception {
- Path libJar = propertyTypeLibJarMap.get(targetVersion);
+ Path libJar = propertyTypeLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(PKG_PREFIX + "/fragile_property_only_getter", "getter_user"))
@@ -79,7 +68,7 @@
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".fragile_property_only_getter.Getter_userKt")
.assertSuccessWithOutput(EXPECTED_GETTER);
@@ -89,8 +78,8 @@
public void testMetadataInProperty_getterOnly() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(propertyTypeLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(propertyTypeLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep property getters
.addKeepRules("-keep class **.Person { <init>(...); }")
.addKeepRules("-keepclassmembers class **.Person { *** get*(); }")
@@ -100,7 +89,7 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(PKG_PREFIX + "/fragile_property_only_getter", "getter_user"))
@@ -108,7 +97,7 @@
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".fragile_property_only_getter.Getter_userKt")
.assertSuccessWithOutput(EXPECTED_GETTER);
@@ -159,10 +148,10 @@
@Test
public void smokeTest_setterApp() throws Exception {
- Path libJar = propertyTypeLibJarMap.get(targetVersion);
+ Path libJar = propertyTypeLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(PKG_PREFIX + "/fragile_property_only_setter", "setter_user"))
@@ -170,7 +159,7 @@
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".fragile_property_only_setter.Setter_userKt")
.assertSuccessWithOutputLines();
@@ -180,8 +169,8 @@
public void testMetadataInProperty_setterOnly() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(propertyTypeLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(propertyTypeLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep property setters (and users)
.addKeepRules("-keep class **.Person { <init>(...); }")
.addKeepRules("-keepclassmembers class **.Person { void set*(...); }")
@@ -195,7 +184,7 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(PKG_PREFIX + "/fragile_property_only_setter", "setter_user"))
@@ -203,7 +192,7 @@
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".fragile_property_only_setter.Setter_userKt")
.assertSuccessWithOutputLines();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTypeTest.java
index eb9ff61..9641f64 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTypeTest.java
@@ -3,13 +3,14 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -20,10 +21,7 @@
import com.android.tools.r8.utils.codeinspector.KmClassSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -34,45 +32,36 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInPropertyTypeTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> propertyTypeLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String propertyTypeLibFolder = PKG_PREFIX + "/propertytype_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path propertyTypeLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(propertyTypeLibFolder, "lib"))
- .compile();
- propertyTypeLibJarMap.put(targetVersion, propertyTypeLibJar);
- }
- }
+ private static final KotlinCompileMemoizer propertyTypeLibJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/propertytype_lib", "lib"));
@Test
public void smokeTest() throws Exception {
- Path libJar = propertyTypeLibJarMap.get(targetVersion);
+ Path libJar = propertyTypeLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/propertytype_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".propertytype_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -82,8 +71,8 @@
public void testMetadataInProperty_renamed() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(propertyTypeLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(propertyTypeLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep non-private members of Impl
.addKeepRules("-keep public class **.Impl { !private *; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
@@ -92,14 +81,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/propertytype_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".propertytype_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInRenamedTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInRenamedTypeTest.java
index 8be744d..a4a3a68 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInRenamedTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInRenamedTypeTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.DescriptorUtils.getDescriptorFromKotlinClassifier;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
@@ -12,6 +12,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -20,11 +21,7 @@
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.KmClassSubject;
-import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -36,47 +33,39 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withAllRuntimesAndApiLevels().build(), KotlinTargetVersion.values());
+ getTestParameters().withAllRuntimesAndApiLevels().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInRenamedTypeTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> annoJarMap = new HashMap<>();
- private static final Map<KotlinTargetVersion, Path> inputJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createInputJar() throws Exception {
- String inputFolder = PKG_PREFIX + "/anno";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path annoJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(inputFolder, "Anno"))
- .compile();
- Path inputJar =
- kotlinc(KOTLINC, targetVersion)
- .addClasspathFiles(annoJar)
- .addSourceFiles(getKotlinFileInTest(inputFolder, "main"))
- .compile();
- annoJarMap.put(targetVersion, annoJar);
- inputJarMap.put(targetVersion, inputJar);
- }
- }
+ private static final KotlinCompileMemoizer annoJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/anno", "Anno"));
+ private static final KotlinCompileMemoizer inputJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/anno", "main"))
+ .configure(
+ kotlinCompilerTool -> {
+ kotlinCompilerTool.addClasspathFiles(
+ annoJarMap.getForConfiguration(
+ kotlinCompilerTool.getCompiler(), kotlinCompilerTool.getTargetVersion()));
+ });
@Test
public void testR8_kotlinStdlibAsLib() throws Exception {
testForR8(parameters.getBackend())
.addLibraryFiles(
- annoJarMap.get(targetVersion),
+ annoJarMap.getForConfiguration(kotlinc, targetVersion),
ToolHelper.getJava8RuntimeJar(),
- ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(inputJarMap.get(targetVersion))
+ ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(inputJarMap.getForConfiguration(kotlinc, targetVersion))
.addKeepRules(OBFUSCATE_RENAMED, KEEP_KEPT)
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
.compile()
@@ -86,8 +75,10 @@
@Test
public void testR8_kotlinStdlibAsClassPath() throws Exception {
testForR8(parameters.getBackend())
- .addClasspathFiles(annoJarMap.get(targetVersion), ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(inputJarMap.get(targetVersion))
+ .addClasspathFiles(
+ annoJarMap.getForConfiguration(kotlinc, targetVersion),
+ ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(inputJarMap.getForConfiguration(kotlinc, targetVersion))
.addKeepRules(OBFUSCATE_RENAMED, KEEP_KEPT)
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
.compile()
@@ -97,8 +88,10 @@
@Test
public void testR8_kotlinStdlibAsProgramFile() throws Exception {
testForR8(parameters.getBackend())
- .addProgramFiles(annoJarMap.get(targetVersion), ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(inputJarMap.get(targetVersion))
+ .addProgramFiles(
+ annoJarMap.getForConfiguration(kotlinc, targetVersion),
+ ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(inputJarMap.getForConfiguration(kotlinc, targetVersion))
.addKeepRules(OBFUSCATE_RENAMED, KEEP_KEPT)
.addKeepRules("-keep class **.Anno")
.addKeepKotlinMetadata()
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInReturnTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInReturnTypeTest.java
index 47b0b82..9783f3b 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInReturnTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInReturnTypeTest.java
@@ -3,13 +3,14 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -20,10 +21,7 @@
import com.android.tools.r8.utils.codeinspector.KmClassSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -34,45 +32,36 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInReturnTypeTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> returnTypeLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String returnTypeLibFolder = PKG_PREFIX + "/returntype_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path returnTypeLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(returnTypeLibFolder, "lib"))
- .compile();
- returnTypeLibJarMap.put(targetVersion, returnTypeLibJar);
- }
- }
+ private static final KotlinCompileMemoizer returnTypeLibJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/returntype_lib", "lib"));
@Test
public void smokeTest() throws Exception {
- Path libJar = returnTypeLibJarMap.get(targetVersion);
+ Path libJar = returnTypeLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/returntype_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".returntype_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -82,8 +71,8 @@
public void testMetadataInReturnType_renamed() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(returnTypeLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(returnTypeLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep non-private members of Impl
.addKeepRules("-keep public class **.Impl { !private *; }")
// Keep Itf, but allow minification.
@@ -94,14 +83,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/returntype_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".returntype_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassNestedTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassNestedTest.java
index 3fb7b23..f33fc30 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassNestedTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassNestedTest.java
@@ -3,8 +3,9 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -13,9 +14,6 @@
import com.android.tools.r8.utils.StringUtils;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -33,37 +31,29 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInSealedClassNestedTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> sealedLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path sealedLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(
- getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "nested"))
- .compile();
- sealedLibJarMap.put(targetVersion, sealedLibJar);
- }
- }
+ private static final KotlinCompileMemoizer sealedLibJarMap =
+ getCompileMemoizer(
+ getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "nested"));
@Test
public void smokeTest() throws Exception {
- Path libJar = sealedLibJarMap.get(targetVersion);
+ Path libJar = sealedLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
@@ -71,7 +61,7 @@
.compile();
testForJvm()
.addRunClasspathFiles(
- ToolHelper.getKotlinStdlibJar(), ToolHelper.getKotlinReflectJar(), libJar)
+ ToolHelper.getKotlinStdlibJar(kotlinc), ToolHelper.getKotlinReflectJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG_APP + ".MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -81,8 +71,8 @@
public void testMetadataInSealedClass_nested() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(sealedLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(sealedLibJarMap.getForConfiguration(kotlinc, targetVersion))
.addKeepAllClassesRule()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
.addKeepAttributes(
@@ -90,7 +80,7 @@
.compile()
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
@@ -98,7 +88,7 @@
.compile();
testForJvm()
.addRunClasspathFiles(
- ToolHelper.getKotlinStdlibJar(), ToolHelper.getKotlinReflectJar(), libJar)
+ ToolHelper.getKotlinStdlibJar(kotlinc), ToolHelper.getKotlinReflectJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG_APP + ".MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java
index 1bb1c44..2dbbc48 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.DescriptorUtils.descriptorToJavaType;
import static com.android.tools.r8.utils.codeinspector.Matchers.isExtensionFunction;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
@@ -15,6 +15,7 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -28,9 +29,6 @@
import com.android.tools.r8.utils.codeinspector.KmPackageSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -41,45 +39,36 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInSealedClassTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> sealedLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String sealedLibFolder = PKG_PREFIX + "/sealed_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path sealedLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(sealedLibFolder, "lib"))
- .compile();
- sealedLibJarMap.put(targetVersion, sealedLibJar);
- }
- }
+ private static final KotlinCompileMemoizer sealedLibJarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/sealed_lib", "lib"));
@Test
public void smokeTest() throws Exception {
- Path libJar = sealedLibJarMap.get(targetVersion);
+ Path libJar = sealedLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/sealed_app", "valid"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".sealed_app.ValidKt")
.assertSuccessWithOutput(EXPECTED);
@@ -89,8 +78,8 @@
public void testMetadataInSealedClass_valid() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(sealedLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(sealedLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep the Expr class
.addKeepRules("-keep class **.Expr")
// Keep the extension function
@@ -103,14 +92,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/sealed_app", "valid"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".sealed_app.ValidKt")
.assertSuccessWithOutput(EXPECTED);
@@ -156,8 +145,8 @@
public void testMetadataInSealedClass_invalid() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(sealedLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(sealedLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep the Expr class
.addKeepRules("-keep class **.Expr")
// Keep the extension function
@@ -168,7 +157,7 @@
.writeToZip();
ProcessResult kotlinTestCompileResult =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFilesWithNonKtExtension(
temp, getFileInTest(PKG_PREFIX + "/sealed_app", "invalid.kt_txt"))
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSuperTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSuperTypeTest.java
index 578a7ec..9b0da43 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSuperTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSuperTypeTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
@@ -11,6 +11,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -21,10 +22,7 @@
import com.android.tools.r8.utils.codeinspector.KmClassSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -35,47 +33,38 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInSuperTypeTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> superTypeLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String superTypeLibFolder = PKG_PREFIX + "/supertype_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path superTypeLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(
- getKotlinFileInTest(superTypeLibFolder, "impl"),
- getKotlinFileInTest(superTypeLibFolder + "/internal", "itf"))
- .compile();
- superTypeLibJarMap.put(targetVersion, superTypeLibJar);
- }
- }
+ private static final KotlinCompileMemoizer superTypeLibJarMap =
+ getCompileMemoizer(
+ getKotlinFileInTest(PKG_PREFIX + "/supertype_lib", "impl"),
+ getKotlinFileInTest(PKG_PREFIX + "/supertype_lib" + "/internal", "itf"));
@Test
public void smokeTest() throws Exception {
- Path libJar = superTypeLibJarMap.get(targetVersion);
+ Path libJar = superTypeLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/supertype_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".supertype_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -85,8 +74,8 @@
public void testMetadataInSupertype_merged() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(superTypeLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(superTypeLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep non-private members except for ones in `internal` definitions.
.addKeepRules("-keep public class !**.internal.**, * { !private *; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
@@ -95,14 +84,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/supertype_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".supertype_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -130,8 +119,8 @@
public void testMetadataInSupertype_renamed() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(superTypeLibJarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(superTypeLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep non-private members except for ones in `internal` definitions.
.addKeepRules("-keep public class !**.internal.**, * { !private *; }")
// Keep `internal` definitions, but allow minification.
@@ -142,14 +131,14 @@
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/supertype_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".supertype_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
index ac4085f..edade6e 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isDexClass;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
@@ -13,6 +13,7 @@
import static junit.framework.TestCase.assertTrue;
import static org.hamcrest.MatcherAssert.assertThat;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -30,9 +31,6 @@
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -63,40 +61,31 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInTypeAliasTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> typeAliasLibJarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String typeAliasLibFolder = PKG_PREFIX + "/typealias_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path typeAliasLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(
- getKotlinFileInTest(typeAliasLibFolder, "lib"),
- getKotlinFileInTest(typeAliasLibFolder, "lib_ext"))
- .compile();
- typeAliasLibJarMap.put(targetVersion, typeAliasLibJar);
- }
- }
+ private static final KotlinCompileMemoizer typeAliasLibJarMap =
+ getCompileMemoizer(
+ getKotlinFileInTest(PKG_PREFIX + "/typealias_lib", "lib"),
+ getKotlinFileInTest(PKG_PREFIX + "/typealias_lib", "lib_ext"));
@Test
public void smokeTest() throws Exception {
- Path libJar = typeAliasLibJarMap.get(targetVersion);
+ Path libJar = typeAliasLibJarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/typealias_app", "main"))
.setOutputPath(temp.newFolder().toPath())
@@ -104,7 +93,7 @@
testForJvm()
.addRunClasspathFiles(
- ToolHelper.getKotlinStdlibJar(), ToolHelper.getKotlinReflectJar(), libJar)
+ ToolHelper.getKotlinStdlibJar(kotlinc), ToolHelper.getKotlinReflectJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".typealias_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -116,8 +105,9 @@
String renamedSuperTypeName = "com.android.tools.r8.kotlin.metadata.typealias_lib.FooBar";
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar(), ToolHelper.getKotlinReflectJar())
- .addProgramFiles(typeAliasLibJarMap.get(targetVersion))
+ .addClasspathFiles(
+ ToolHelper.getKotlinStdlibJar(kotlinc), ToolHelper.getKotlinReflectJar(kotlinc))
+ .addProgramFiles(typeAliasLibJarMap.getForConfiguration(kotlinc, targetVersion))
// Keep non-private members of Impl
.addKeepRules("-keep class **.Impl { !private *; }")
// Keep but allow obfuscation of types.
@@ -144,14 +134,14 @@
.writeToZip();
Path appJar =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/typealias_app", "main"))
.compile();
testForJvm()
.addRunClasspathFiles(
- ToolHelper.getKotlinStdlibJar(), ToolHelper.getKotlinReflectJar(), libJar)
+ ToolHelper.getKotlinStdlibJar(kotlinc), ToolHelper.getKotlinReflectJar(kotlinc), libJar)
.addClasspath(appJar)
.run(parameters.getRuntime(), PKG + ".typealias_app.MainKt")
.assertSuccessWithOutput(EXPECTED.replace(superTypeName, renamedSuperTypeName));
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeArgumentsTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeArgumentsTest.java
index 52ae0b3..788abf2 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeArgumentsTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeArgumentsTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isDexClass;
import static com.android.tools.r8.utils.codeinspector.Matchers.isExtensionFunction;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
@@ -12,6 +12,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -30,12 +31,9 @@
import com.android.tools.r8.utils.codeinspector.KmValueParameterSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import kotlinx.metadata.KmClassifier.TypeParameter;
import kotlinx.metadata.KmVariance;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -79,45 +77,36 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInTypeArgumentsTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static final Map<KotlinTargetVersion, Path> jarMap = new HashMap<>();
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- String typeAliasLibFolder = PKG_PREFIX + "/typeargument_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path typeAliasLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(typeAliasLibFolder, "lib"))
- .compile();
- jarMap.put(targetVersion, typeAliasLibJar);
- }
- }
+ private static final KotlinCompileMemoizer jarMap =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/typeargument_lib", "lib"));
@Test
public void smokeTest() throws Exception {
- Path libJar = jarMap.get(targetVersion);
+ Path libJar = jarMap.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/typeargument_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".typeargument_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -127,8 +116,8 @@
public void testMetadataInTypeAliasWithR8() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(jarMap.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(jarMap.getForConfiguration(kotlinc, targetVersion))
// Keep ClassThatWillBeObfuscated, but allow minification.
.addKeepRules("-keep,allowobfuscation class **ClassThatWillBeObfuscated")
.addKeepRules("-keepclassmembers class **ClassThatWillBeObfuscated { *; }")
@@ -148,12 +137,12 @@
.inspect(this::inspect)
.writeToZip();
Path mainJar =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/typeargument_app", "main"))
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(mainJar)
.run(parameters.getRuntime(), PKG + ".typeargument_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
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 ffe5a51..133dd37 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
@@ -4,11 +4,12 @@
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertNull;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -21,13 +22,9 @@
import java.io.IOException;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ExecutionException;
import junit.framework.TestCase;
import kotlinx.metadata.jvm.KotlinClassHeader;
import kotlinx.metadata.jvm.KotlinClassMetadata;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -36,46 +33,36 @@
public class MetadataRewriteInlinePropertyTest extends KotlinMetadataTestBase {
private final String EXPECTED = StringUtils.lines("true", "false", "false", "true");
- private final String PKG_LIB = PKG + ".inline_property_lib";
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewriteInlinePropertyTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static Map<KotlinTargetVersion, Path> libJars = new HashMap<>();
+ private static final KotlinCompileMemoizer libJars =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/inline_property_lib", "lib"));
private final TestParameters parameters;
- @BeforeClass
- public static void createLibJar() throws Exception {
- String baseLibFolder = PKG_PREFIX + "/inline_property_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path baseLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(baseLibFolder, "lib"))
- .compile();
- libJars.put(targetVersion, baseLibJar);
- }
- }
-
@Test
public void smokeTest() throws Exception {
- Path libJar = libJars.get(targetVersion);
+ Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/inline_property_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG + ".inline_property_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -85,8 +72,8 @@
public void testMetadataForLib() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(libJars.get(targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
// Allow renaming A to ensure that we rename in the flexible upper bound type.
.addKeepAllClassesRule()
.addKeepAttributes(
@@ -98,21 +85,22 @@
.inspect(this::inspect)
.writeToZip();
Path main =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/inline_property_app", "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
.addRunClasspathFiles(
- ToolHelper.getKotlinStdlibJar(), ToolHelper.getKotlinReflectJar(), libJar)
+ ToolHelper.getKotlinStdlibJar(kotlinc), ToolHelper.getKotlinReflectJar(kotlinc), libJar)
.addClasspath(main)
.run(parameters.getRuntime(), PKG + ".inline_property_app.MainKt")
.assertSuccessWithOutput(EXPECTED);
}
- private void inspect(CodeInspector inspector) throws IOException, ExecutionException {
- CodeInspector stdLibInspector = new CodeInspector(libJars.get(targetVersion));
+ private void inspect(CodeInspector inspector) throws IOException {
+ CodeInspector stdLibInspector =
+ new CodeInspector(libJars.getForConfiguration(kotlinc, targetVersion));
for (FoundClassSubject clazzSubject : stdLibInspector.allClasses()) {
ClassSubject r8Clazz = inspector.clazz(clazzSubject.getOriginalName());
assertThat(r8Clazz, isPresent());
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteJvmStaticTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteJvmStaticTest.java
index 2d3834b..83b8e62 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteJvmStaticTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteJvmStaticTest.java
@@ -3,13 +3,13 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.kotlin.metadata.jvmstatic_app.MainJava;
@@ -23,8 +23,7 @@
import com.android.tools.r8.utils.codeinspector.KmPropertySubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.nio.file.Path;
-import java.nio.file.Paths;
-import org.junit.BeforeClass;
+import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -39,39 +38,34 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
- public static TestParametersCollection data() {
- return getTestParameters().withCfRuntimes().build();
+ @Parameterized.Parameters(name = "{0}, kotlinc: {1}")
+ public static List<Object[]> data() {
+ return buildParameters(getTestParameters().withCfRuntimes().build(), getKotlinCompilers());
}
- public MetadataRewriteJvmStaticTest(TestParameters parameters) {
+ public MetadataRewriteJvmStaticTest(TestParameters parameters, KotlinCompiler kotlinc) {
// We are testing static methods on interfaces which requires java 8.
- super(KotlinTargetVersion.JAVA_8);
+ super(KotlinTargetVersion.JAVA_8, kotlinc);
this.parameters = parameters;
}
- private static Path kotlincLibJar = Paths.get("");
-
- @BeforeClass
- public static void createLibJar() throws Exception {
- kotlincLibJar =
- kotlinc(KOTLINC, KotlinTargetVersion.JAVA_8)
- .addSourceFiles(
- getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "lib"))
- .compile();
- }
+ private static KotlinCompileMemoizer kotlincLibJar =
+ getCompileMemoizer(
+ getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "lib"));
@Test
public void smokeTest() throws Exception {
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
- .addClasspathFiles(kotlincLibJar)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+ .addClasspathFiles(kotlincLibJar.getForConfiguration(kotlinc, targetVersion))
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), kotlincLibJar)
+ .addRunClasspathFiles(
+ ToolHelper.getKotlinStdlibJar(kotlinc),
+ kotlincLibJar.getForConfiguration(kotlinc, targetVersion))
.addClasspath(output)
.run(parameters.getRuntime(), PKG_APP + ".MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -80,7 +74,9 @@
@Test
public void smokeTestJava() throws Exception {
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), kotlincLibJar)
+ .addRunClasspathFiles(
+ ToolHelper.getKotlinStdlibJar(kotlinc),
+ kotlincLibJar.getForConfiguration(kotlinc, targetVersion))
.addProgramClassFileData(MainJava.dump())
.run(parameters.getRuntime(), MainJava.class)
.assertSuccessWithOutput(EXPECTED);
@@ -90,7 +86,7 @@
public void testMetadata() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addProgramFiles(kotlincLibJar)
+ .addProgramFiles(kotlincLibJar.getForConfiguration(kotlinc, targetVersion))
.addKeepAllClassesRule()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
.compile()
@@ -102,14 +98,14 @@
private void testKotlin(Path libJar) throws Exception {
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG_APP + ".MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -117,7 +113,7 @@
private void testJava(Path libJar) throws Exception {
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addProgramClassFileData(MainJava.dump())
.run(parameters.getRuntime(), MainJava.class)
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepPathTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepPathTest.java
index bb61374..40c7573 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepPathTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepPathTest.java
@@ -4,12 +4,13 @@
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestShrinkerBuilder;
import com.android.tools.r8.ToolHelper;
@@ -17,11 +18,7 @@
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
-import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -29,43 +26,36 @@
@RunWith(Parameterized.class)
public class MetadataRewriteKeepPathTest extends KotlinMetadataTestBase {
- @Parameterized.Parameters(name = "{0} target: {1}, keep: {2}")
+ @Parameterized.Parameters(name = "{0} target: {1}, kotlinc: {2}, keep: {3}")
public static Collection<Object[]> data() {
return buildParameters(
getTestParameters().withCfRuntimes().build(),
KotlinTargetVersion.values(),
+ getKotlinCompilers(),
BooleanUtils.values());
}
- private static Map<KotlinTargetVersion, Path> libJars = new HashMap<>();
+ private static final KotlinCompileMemoizer libJars =
+ getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/box_primitives_lib", "lib"));
private static final String LIB_CLASS_NAME = PKG + ".box_primitives_lib.Test";
private final TestParameters parameters;
private final boolean keepMetadata;
public MetadataRewriteKeepPathTest(
- TestParameters parameters, KotlinTargetVersion targetVersion, boolean keepMetadata) {
- super(targetVersion);
+ TestParameters parameters,
+ KotlinTargetVersion targetVersion,
+ KotlinCompiler kotlinc,
+ boolean keepMetadata) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
this.keepMetadata = keepMetadata;
}
- @BeforeClass
- public static void createLibJar() throws Exception {
- String baseLibFolder = PKG_PREFIX + "/box_primitives_lib";
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path baseLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFileInTest(baseLibFolder, "lib"))
- .compile();
- libJars.put(targetVersion, baseLibJar);
- }
- }
-
@Test
public void testProgramPath() throws Exception {
testForR8(parameters.getBackend())
- .addProgramFiles(libJars.get(targetVersion))
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.addKeepRules("-keep class " + LIB_CLASS_NAME)
.applyIf(keepMetadata, TestShrinkerBuilder::addKeepKotlinMetadata)
.addKeepRuntimeVisibleAnnotations()
@@ -78,8 +68,8 @@
@Test
public void testClassPathPath() throws Exception {
testForR8(parameters.getBackend())
- .addProgramFiles(libJars.get(targetVersion))
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.addKeepRules("-keep class " + LIB_CLASS_NAME)
.addKeepRuntimeVisibleAnnotations()
.compile()
@@ -89,8 +79,8 @@
@Test
public void testLibraryPath() throws Exception {
testForR8(parameters.getBackend())
- .addProgramFiles(libJars.get(targetVersion))
- .addLibraryFiles(ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+ .addLibraryFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.addKeepRules("-keep class " + LIB_CLASS_NAME)
.addKeepRuntimeVisibleAnnotations()
@@ -101,7 +91,7 @@
@Test
public void testMissing() throws Exception {
testForR8(parameters.getBackend())
- .addProgramFiles(libJars.get(targetVersion))
+ .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
.addKeepRules("-keep class " + LIB_CLASS_NAME)
.addKeepRuntimeVisibleAnnotations()
.compile()
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepTest.java
index 0f80128..8c681bd 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepTest.java
@@ -4,9 +4,11 @@
package com.android.tools.r8.kotlin.metadata;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -21,23 +23,26 @@
@RunWith(Parameterized.class)
public class MetadataRewriteKeepTest extends KotlinMetadataTestBase {
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
private final TestParameters parameters;
- public MetadataRewriteKeepTest(TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ public MetadataRewriteKeepTest(
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
@Test
public void testR8() throws Exception {
testForR8(parameters.getBackend())
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.setMinApi(parameters.getApiLevel())
.addKeepKotlinMetadata()
.addKeepRules("-keep class kotlin.io.** { *; }")
@@ -49,7 +54,7 @@
@Test
public void testR8KeepIf() throws Exception {
testForR8(parameters.getBackend())
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.setMinApi(parameters.getApiLevel())
.addKeepRules("-keep class kotlin.io.** { *; }")
.addKeepRules("-if class *", "-keep class kotlin.Metadata { *; }")
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java
index 71d888c..3e62729 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java
@@ -4,6 +4,9 @@
package com.android.tools.r8.kotlin.metadata;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
+
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -17,24 +20,26 @@
@RunWith(Parameterized.class)
public class MetadataRewritePassThroughTest extends KotlinMetadataTestBase {
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
private final TestParameters parameters;
public MetadataRewritePassThroughTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
@Test
public void testKotlinStdLib() throws Exception {
testForR8(parameters.getBackend())
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.setMinApi(parameters.getApiLevel())
.addKeepAllClassesRule()
.addKeepKotlinMetadata()
@@ -42,6 +47,7 @@
.compile()
.inspect(
inspector ->
- assertEqualMetadata(new CodeInspector(ToolHelper.getKotlinStdlibJar()), inspector));
+ assertEqualMetadata(
+ new CodeInspector(ToolHelper.getKotlinStdlibJar(kotlinc)), inspector));
}
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePrunedObjectsTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePrunedObjectsTest.java
index 2a33484..39793cf 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePrunedObjectsTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePrunedObjectsTest.java
@@ -4,12 +4,13 @@
package com.android.tools.r8.kotlin.metadata;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static junit.framework.TestCase.assertEquals;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -20,9 +21,6 @@
import com.android.tools.r8.utils.codeinspector.KmClassSubject;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -34,45 +32,37 @@
private static final String PKG_LIB = PKG + ".pruned_lib";
private static final String PKG_APP = PKG + ".pruned_app";
- private static Map<KotlinTargetVersion, Path> libJars = new HashMap<>();
+ private static final KotlinCompileMemoizer libJars =
+ getCompileMemoizer(
+ getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "lib"));
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withCfRuntimes().build(), KotlinTargetVersion.values());
+ getTestParameters().withCfRuntimes().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
public MetadataRewritePrunedObjectsTest(
- TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- @BeforeClass
- public static void createLibJar() throws Exception {
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- Path baseLibJar =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(
- getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_LIB), "lib"))
- .compile();
- libJars.put(targetVersion, baseLibJar);
- }
- }
-
@Test
public void smokeTest() throws Exception {
- Path libJar = libJars.get(targetVersion);
+ Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
.setOutputPath(temp.newFolder().toPath())
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addClasspath(output)
.run(parameters.getRuntime(), PKG_APP + ".MainKt")
.assertSuccessWithOutput(EXPECTED);
@@ -82,7 +72,7 @@
public void testMetadataForLib() throws Exception {
Path libJar =
testForR8(parameters.getBackend())
- .addProgramFiles(libJars.get(targetVersion))
+ .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
.addKeepRules("-keep class " + PKG_LIB + ".Sub { <init>(); *** kept(); }")
.addKeepRuntimeVisibleAnnotations()
.noMinification()
@@ -90,13 +80,13 @@
.inspect(this::checkPruned)
.writeToZip();
Path output =
- kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
+ kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
.compile();
testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
+ .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc), libJar)
.addProgramFiles(output)
.run(parameters.getRuntime(), PKG_APP + ".MainKt")
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
index dec2ff2..8005276 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
@@ -10,6 +11,7 @@
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.R8TestRunResult;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
@@ -28,14 +30,17 @@
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0} target: {1}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withAllRuntimesAndApiLevels().build(), KotlinTargetVersion.values());
+ getTestParameters().withAllRuntimesAndApiLevels().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
- public MetadataStripTest(TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ public MetadataStripTest(
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
@@ -48,7 +53,7 @@
testForR8(parameters.getBackend())
.addProgramFiles(getKotlinJarFile(folder))
.addProgramFiles(getJavaJarFile(folder))
- .addProgramFiles(ToolHelper.getKotlinReflectJar())
+ .addProgramFiles(ToolHelper.getKotlinReflectJar(kotlinc))
.addKeepMainRule(mainClassName)
.addKeepKotlinMetadata()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataVersionNumberBumpTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataVersionNumberBumpTest.java
index e262f66..9cd2614 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataVersionNumberBumpTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataVersionNumberBumpTest.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.kotlin.metadata;
+import static com.android.tools.r8.ToolHelper.getKotlinC_1_3_72;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.objectweb.asm.Opcodes.ASM7;
@@ -43,7 +44,7 @@
}
public MetadataVersionNumberBumpTest(TestParameters parameters) {
- super(KotlinTargetVersion.JAVA_8);
+ super(KotlinTargetVersion.JAVA_8, getKotlinC_1_3_72());
this.parameters = parameters;
}
@@ -86,7 +87,7 @@
private void rewriteMetadataVersion(Consumer<byte[]> rewrittenBytesConsumer, int[] newVersion)
throws IOException {
ZipUtils.iter(
- ToolHelper.getKotlinStdlibJar().toString(),
+ ToolHelper.getKotlinStdlibJar(kotlinc).toString(),
((entry, input) -> {
if (!entry.getName().endsWith(".class")) {
return;
diff --git a/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java b/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java
index a2bb5df..53b9d9b 100644
--- a/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java
@@ -4,12 +4,13 @@
package com.android.tools.r8.kotlin.reflection;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assume.assumeTrue;
import com.android.tools.r8.DexIndexedConsumer.ArchiveConsumer;
-import com.android.tools.r8.TestBase;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
+import com.android.tools.r8.KotlinTestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -17,60 +18,50 @@
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.FileUtils;
import java.io.File;
-import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
-public class KotlinReflectTest extends TestBase {
+public class KotlinReflectTest extends KotlinTestBase {
private final TestParameters parameters;
private final KotlinTargetVersion targetVersion;
private static final String EXPECTED_OUTPUT = "Hello World!";
private static final String PKG = KotlinReflectTest.class.getPackage().getName();
- private static Map<KotlinTargetVersion, Path> compiledJars = new HashMap<>();
+ private static final KotlinCompileMemoizer compiledJars =
+ getCompileMemoizer(
+ Paths.get(
+ ToolHelper.TESTS_DIR,
+ "java",
+ DescriptorUtils.getBinaryNameFromJavaType(PKG),
+ "SimpleReflect" + FileUtils.KT_EXTENSION));
- @Parameters(name = "{0}, target: {1}")
+ @Parameters(name = "{0}, target: {1}, kotlinc: {2}")
public static List<Object[]> data() {
return buildParameters(
- getTestParameters().withAllRuntimesAndApiLevels().build(), KotlinTargetVersion.values());
+ getTestParameters().withAllRuntimesAndApiLevels().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
- public KotlinReflectTest(TestParameters parameters, KotlinTargetVersion targetVersion) {
+ public KotlinReflectTest(
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
this.targetVersion = targetVersion;
}
- @BeforeClass
- public static void createLibJar() throws Exception {
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- compiledJars.put(
- targetVersion,
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(
- Paths.get(
- ToolHelper.TESTS_DIR,
- "java",
- DescriptorUtils.getBinaryNameFromJavaType(PKG),
- "SimpleReflect" + FileUtils.KT_EXTENSION))
- .compile());
- }
- }
-
@Test
public void testCf() throws Exception {
assumeTrue(parameters.isCfRuntime());
testForJvm()
- .addProgramFiles(compiledJars.get(targetVersion))
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(ToolHelper.getKotlinReflectJar())
+ .addProgramFiles(compiledJars.getForConfiguration(kotlinc, targetVersion))
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(ToolHelper.getKotlinReflectJar(kotlinc))
.run(parameters.getRuntime(), PKG + ".SimpleReflectKt")
.assertSuccessWithOutputLines(EXPECTED_OUTPUT);
}
@@ -80,9 +71,9 @@
assumeTrue(parameters.isDexRuntime());
final File output = temp.newFile("output.zip");
testForD8(parameters.getBackend())
- .addProgramFiles(compiledJars.get(targetVersion))
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(ToolHelper.getKotlinReflectJar())
+ .addProgramFiles(compiledJars.getForConfiguration(kotlinc, targetVersion))
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(ToolHelper.getKotlinReflectJar(kotlinc))
.setProgramConsumer(new ArchiveConsumer(output.toPath(), true))
.setMinApi(parameters.getApiLevel())
.addOptionsModification(
@@ -98,9 +89,9 @@
public void testR8() throws Exception {
final File foo = temp.newFile("foo");
testForR8(parameters.getBackend())
- .addProgramFiles(compiledJars.get(targetVersion))
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(ToolHelper.getKotlinReflectJar())
+ .addProgramFiles(compiledJars.getForConfiguration(kotlinc, targetVersion))
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(ToolHelper.getKotlinReflectJar(kotlinc))
.setMinApi(parameters.getApiLevel())
.addKeepAllClassesRule()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
diff --git a/src/test/java/com/android/tools/r8/kotlin/sealed/SealedClassTest.java b/src/test/java/com/android/tools/r8/kotlin/sealed/SealedClassTest.java
index 5731086..cfe38a7 100644
--- a/src/test/java/com/android/tools/r8/kotlin/sealed/SealedClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/sealed/SealedClassTest.java
@@ -5,22 +5,21 @@
package com.android.tools.r8.kotlin.sealed;
import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
import static com.android.tools.r8.ToolHelper.getFilesInTestFolderRelativeToClass;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static org.hamcrest.CoreMatchers.containsString;
import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.KotlinTestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime;
-import com.android.tools.r8.TestRuntime.CfRuntime;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import java.io.IOException;
import java.nio.file.Path;
+import java.util.Collection;
import java.util.List;
import java.util.concurrent.ExecutionException;
-import java.util.function.BiFunction;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -37,30 +36,32 @@
@Parameters(name = "{0}")
public static List<Object[]> data() {
return buildParameters(
- getTestParameters().withAllRuntimesAndApiLevels().build(), KotlinTargetVersion.values());
+ getTestParameters().withAllRuntimesAndApiLevels().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
- public SealedClassTest(TestParameters parameters, KotlinTargetVersion targetVersion) {
- super(targetVersion);
+ public SealedClassTest(
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static BiFunction<TestRuntime, KotlinTargetVersion, Path> compilationResults =
- memoizeBiFunction(SealedClassTest::compileKotlinCode);
+ private static KotlinCompileMemoizer compilationResults = getCompileMemoizer();
- private static Path compileKotlinCode(TestRuntime runtime, KotlinTargetVersion targetVersion)
- throws IOException {
- CfRuntime cfRuntime = runtime.isCf() ? runtime.asCf() : TestRuntime.getCheckedInJdk9();
- return kotlinc(cfRuntime, getStaticTemp(), KOTLINC, targetVersion)
- .addSourceFiles(getFilesInTestFolderRelativeToClass(SealedClassTest.class, "kt", ".kt"))
- .compile();
+ private static Collection<Path> getKotlinSources() {
+ try {
+ return getFilesInTestFolderRelativeToClass(SealedClassTest.class, "kt", ".kt");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
}
@Test
public void testRuntime() throws ExecutionException, CompilationFailedException, IOException {
testForRuntime(parameters)
- .addProgramFiles(compilationResults.apply(parameters.getRuntime(), targetVersion))
- .addRunClasspathFiles(buildOnDexRuntime(parameters, ToolHelper.getKotlinStdlibJar()))
+ .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+ .addRunClasspathFiles(buildOnDexRuntime(parameters, ToolHelper.getKotlinStdlibJar(kotlinc)))
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines(EXPECTED);
}
@@ -68,8 +69,8 @@
@Test
public void testR8() throws ExecutionException, CompilationFailedException, IOException {
testForR8(parameters.getBackend())
- .addProgramFiles(compilationResults.apply(parameters.getRuntime(), targetVersion))
- .addProgramFiles(buildOnDexRuntime(parameters, ToolHelper.getKotlinStdlibJar()))
+ .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+ .addProgramFiles(buildOnDexRuntime(parameters, ToolHelper.getKotlinStdlibJar(kotlinc)))
.setMinApi(parameters.getApiLevel())
.allowAccessModification()
.allowDiagnosticWarningMessages(parameters.isCfRuntime())
diff --git a/src/test/java/com/android/tools/r8/naming/AbstractR8KotlinNamingTestBase.java b/src/test/java/com/android/tools/r8/naming/AbstractR8KotlinNamingTestBase.java
index 9f2d940..ddc2da6 100644
--- a/src/test/java/com/android/tools/r8/naming/AbstractR8KotlinNamingTestBase.java
+++ b/src/test/java/com/android/tools/r8/naming/AbstractR8KotlinNamingTestBase.java
@@ -7,6 +7,7 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
import static org.hamcrest.MatcherAssert.assertThat;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.kotlin.AbstractR8KotlinTestBase;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
@@ -21,9 +22,10 @@
AbstractR8KotlinNamingTestBase(
KotlinTargetVersion kotlinTargetVersion,
+ KotlinCompiler kotlinc,
boolean allowAccessModification,
boolean minification) {
- super(kotlinTargetVersion, allowAccessModification);
+ super(kotlinTargetVersion, kotlinc, allowAccessModification);
this.minification = minification;
}
diff --git a/src/test/java/com/android/tools/r8/naming/EnumMinificationKotlinTest.java b/src/test/java/com/android/tools/r8/naming/EnumMinificationKotlinTest.java
index 73d9085..a390ded 100644
--- a/src/test/java/com/android/tools/r8/naming/EnumMinificationKotlinTest.java
+++ b/src/test/java/com/android/tools/r8/naming/EnumMinificationKotlinTest.java
@@ -3,11 +3,13 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.naming;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.KotlinTestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -31,17 +33,21 @@
private final TestParameters parameters;
private final boolean minify;
- @Parameterized.Parameters(name = "{0} target: {1} minify: {2}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}, minify: {3}")
public static Collection<Object[]> data() {
return buildParameters(
getTestParameters().withAllRuntimesAndApiLevels().build(),
KotlinTargetVersion.values(),
+ getKotlinCompilers(),
BooleanUtils.values());
}
public EnumMinificationKotlinTest(
- TestParameters parameters, KotlinTargetVersion targetVersion, boolean minify) {
- super(targetVersion);
+ TestParameters parameters,
+ KotlinTargetVersion targetVersion,
+ KotlinCompiler kotlinc,
+ boolean minify) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
this.minify = minify;
}
diff --git a/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java b/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
index 93a0639..70c59b3 100644
--- a/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
+++ b/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
@@ -3,12 +3,14 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.naming;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.SingleTestRunResult;
import com.android.tools.r8.TestCompileResult;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -38,15 +40,21 @@
public class KotlinIntrinsicsIdentifierTest extends AbstractR8KotlinNamingTestBase {
private static final String FOLDER = "intrinsics_identifiers";
- @Parameters(name = "target: {0}, allowAccessModification: {1}, minification: {2}")
+ @Parameters(name = "target: {0}, kotlinc: {1}, allowAccessModification: {2}, minification: {3}")
public static Collection<Object[]> data() {
return buildParameters(
- KotlinTargetVersion.values(), BooleanUtils.values(), BooleanUtils.values());
+ KotlinTargetVersion.values(),
+ getKotlinCompilers(),
+ BooleanUtils.values(),
+ BooleanUtils.values());
}
public KotlinIntrinsicsIdentifierTest(
- KotlinTargetVersion targetVersion, boolean allowAccessModification, boolean minification) {
- super(targetVersion, allowAccessModification, minification);
+ KotlinTargetVersion targetVersion,
+ KotlinCompiler kotlinc,
+ boolean allowAccessModification,
+ boolean minification) {
+ super(targetVersion, kotlinc, allowAccessModification, minification);
}
@Test
@@ -71,7 +79,7 @@
public void test_example3() throws Exception {
TestKotlinClass ex3 = new TestKotlinClass("intrinsics_identifiers.Example3Kt");
String mainClassName = ex3.getClassName();
- TestCompileResult result =
+ TestCompileResult<?, ?> result =
testForR8(Backend.DEX)
.addProgramFiles(getKotlinJarFile(FOLDER))
.addProgramFiles(getJavaJarFile(FOLDER))
@@ -124,7 +132,7 @@
String targetFieldName,
String targetMethodName) throws Exception {
String mainClassName = testMain.getClassName();
- SingleTestRunResult result =
+ SingleTestRunResult<?> result =
testForR8(Backend.DEX)
.addProgramFiles(getKotlinJarFile(FOLDER))
.addProgramFiles(getJavaJarFile(FOLDER))
diff --git a/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionInSameFileRetraceTests.java b/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionInSameFileRetraceTests.java
index 0beee59..274b990 100644
--- a/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionInSameFileRetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionInSameFileRetraceTests.java
@@ -4,8 +4,8 @@
package com.android.tools.r8.retrace;
import static com.android.tools.r8.Collectors.toSingle;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
import static com.android.tools.r8.ToolHelper.getFilesInTestFolderRelativeToClass;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.containsLinePositions;
import static com.android.tools.r8.utils.codeinspector.Matchers.isInlineFrame;
import static com.android.tools.r8.utils.codeinspector.Matchers.isInlineStack;
@@ -16,11 +16,9 @@
import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.CompilationMode;
-import com.android.tools.r8.TestBase;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
+import com.android.tools.r8.KotlinTestBase;
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.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.naming.retrace.StackTrace;
@@ -30,15 +28,16 @@
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.io.IOException;
import java.nio.file.Path;
+import java.util.Collection;
+import java.util.List;
import java.util.concurrent.ExecutionException;
-import java.util.function.Function;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
-public class KotlinInlineFunctionInSameFileRetraceTests extends TestBase {
+public class KotlinInlineFunctionInSameFileRetraceTests extends KotlinTestBase {
private static final String FILENAME_INLINE = "InlineFunctionsInSameFile.kt";
private static final String MAIN = "retrace.InlineFunctionsInSameFileKt";
@@ -46,30 +45,37 @@
private final TestParameters parameters;
@Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimesAndApiLevels().build();
+ public static List<Object[]> data() {
+ // TODO(b/141817471): Extend with compilation modes.
+ return buildParameters(
+ getTestParameters().withAllRuntimesAndApiLevels().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
- public KotlinInlineFunctionInSameFileRetraceTests(TestParameters parameters) {
+ public KotlinInlineFunctionInSameFileRetraceTests(
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static Function<TestRuntime, Path> compilationResults =
- memoizeFunction(KotlinInlineFunctionInSameFileRetraceTests::compileKotlinCode);
+ private static final KotlinCompileMemoizer compilationResults =
+ getCompileMemoizer(getKotlinSources());
- private static Path compileKotlinCode(TestRuntime runtime) throws IOException {
- CfRuntime cfRuntime = runtime.isCf() ? runtime.asCf() : TestRuntime.getCheckedInJdk9();
- return kotlinc(cfRuntime, getStaticTemp(), KOTLINC, KotlinTargetVersion.JAVA_8)
- .addSourceFiles(
- getFilesInTestFolderRelativeToClass(KotlinInlineFunctionRetraceTest.class, "kt", ".kt"))
- .compile();
+ private static Collection<Path> getKotlinSources() {
+ try {
+ return getFilesInTestFolderRelativeToClass(
+ KotlinInlineFunctionRetraceTest.class, "kt", ".kt");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
}
@Test
public void testRuntime() throws ExecutionException, CompilationFailedException, IOException {
testForRuntime(parameters)
- .addProgramFiles(compilationResults.apply(parameters.getRuntime()))
- .addRunClasspathFiles(buildOnDexRuntime(parameters, ToolHelper.getKotlinStdlibJar()))
+ .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+ .addRunClasspathFiles(buildOnDexRuntime(parameters, ToolHelper.getKotlinStdlibJar(kotlinc)))
.run(parameters.getRuntime(), MAIN)
.assertFailureWithErrorThatMatches(containsString("foo"))
.assertFailureWithErrorThatMatches(
@@ -80,11 +86,11 @@
@Test
public void testRetraceKotlinInlineStaticFunction()
throws ExecutionException, CompilationFailedException, IOException {
- Path kotlinSources = compilationResults.apply(parameters.getRuntime());
+ Path kotlinSources = compilationResults.getForConfiguration(kotlinc, targetVersion);
CodeInspector kotlinInspector = new CodeInspector(kotlinSources);
testForR8(parameters.getBackend())
- .addProgramFiles(compilationResults.apply(parameters.getRuntime()))
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.addKeepAttributes("SourceFile", "LineNumberTable")
.setMode(CompilationMode.RELEASE)
.addKeepMainRule(MAIN)
diff --git a/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionRetraceTest.java b/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionRetraceTest.java
index 3b0538d..53d2a7c 100644
--- a/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionRetraceTest.java
@@ -5,8 +5,8 @@
package com.android.tools.r8.retrace;
import static com.android.tools.r8.Collectors.toSingle;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
import static com.android.tools.r8.ToolHelper.getFilesInTestFolderRelativeToClass;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.containsLinePositions;
import static com.android.tools.r8.utils.codeinspector.Matchers.isInlineFrame;
import static com.android.tools.r8.utils.codeinspector.Matchers.isInlineStack;
@@ -17,11 +17,9 @@
import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.CompilationMode;
-import com.android.tools.r8.TestBase;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
+import com.android.tools.r8.KotlinTestBase;
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.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.naming.retrace.StackTrace;
@@ -32,15 +30,16 @@
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.io.IOException;
import java.nio.file.Path;
+import java.util.Collection;
+import java.util.List;
import java.util.concurrent.ExecutionException;
-import java.util.function.Function;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
-public class KotlinInlineFunctionRetraceTest extends TestBase {
+public class KotlinInlineFunctionRetraceTest extends KotlinTestBase {
private final TestParameters parameters;
// TODO(b/151132660): Fix filename
@@ -48,24 +47,30 @@
private static final String FILENAME_INLINE_INSTANCE = "InlineFunction.kt";
@Parameters(name = "{0}")
- public static TestParametersCollection data() {
+ public static List<Object[]> data() {
// TODO(b/141817471): Extend with compilation modes.
- return getTestParameters().withAllRuntimesAndApiLevels().build();
+ return buildParameters(
+ getTestParameters().withAllRuntimesAndApiLevels().build(),
+ KotlinTargetVersion.values(),
+ getKotlinCompilers());
}
- public KotlinInlineFunctionRetraceTest(TestParameters parameters) {
+ public KotlinInlineFunctionRetraceTest(
+ TestParameters parameters, KotlinTargetVersion targetVersion, KotlinCompiler kotlinc) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
}
- private static Function<TestRuntime, Path> compilationResults =
- memoizeFunction(KotlinInlineFunctionRetraceTest::compileKotlinCode);
+ private static final KotlinCompileMemoizer compilationResults =
+ getCompileMemoizer(getKotlinSources());
- private static Path compileKotlinCode(TestRuntime runtime) throws IOException {
- CfRuntime cfRuntime = runtime.isCf() ? runtime.asCf() : TestRuntime.getCheckedInJdk9();
- return kotlinc(cfRuntime, getStaticTemp(), KOTLINC, KotlinTargetVersion.JAVA_8)
- .addSourceFiles(
- getFilesInTestFolderRelativeToClass(KotlinInlineFunctionRetraceTest.class, "kt", ".kt"))
- .compile();
+ private static Collection<Path> getKotlinSources() {
+ try {
+ return getFilesInTestFolderRelativeToClass(
+ KotlinInlineFunctionRetraceTest.class, "kt", ".kt");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
}
private FoundMethodSubject inlineExceptionStatic(CodeInspector kotlinInspector) {
@@ -85,8 +90,8 @@
@Test
public void testRuntime() throws ExecutionException, CompilationFailedException, IOException {
testForRuntime(parameters)
- .addProgramFiles(compilationResults.apply(parameters.getRuntime()))
- .addRunClasspathFiles(buildOnDexRuntime(parameters, ToolHelper.getKotlinStdlibJar()))
+ .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+ .addRunClasspathFiles(buildOnDexRuntime(parameters, ToolHelper.getKotlinStdlibJar(kotlinc)))
.run(parameters.getRuntime(), "retrace.MainKt")
.assertFailureWithErrorThatMatches(containsString("inlineExceptionStatic"))
.assertFailureWithErrorThatMatches(containsString("at retrace.MainKt.main(Main.kt:15)"));
@@ -97,10 +102,10 @@
throws ExecutionException, CompilationFailedException, IOException {
String main = "retrace.MainKt";
String mainFileName = "Main.kt";
- Path kotlinSources = compilationResults.apply(parameters.getRuntime());
+ Path kotlinSources = compilationResults.getForConfiguration(kotlinc, targetVersion);
CodeInspector kotlinInspector = new CodeInspector(kotlinSources);
testForR8(parameters.getBackend())
- .addProgramFiles(kotlinSources, ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(kotlinSources, ToolHelper.getKotlinStdlibJar(kotlinc))
.addKeepAttributes("SourceFile", "LineNumberTable")
.allowDiagnosticWarningMessages()
.setMode(CompilationMode.RELEASE)
@@ -127,10 +132,10 @@
throws ExecutionException, CompilationFailedException, IOException {
String main = "retrace.MainInstanceKt";
String mainFileName = "MainInstance.kt";
- Path kotlinSources = compilationResults.apply(parameters.getRuntime());
+ Path kotlinSources = compilationResults.getForConfiguration(kotlinc, targetVersion);
CodeInspector kotlinInspector = new CodeInspector(kotlinSources);
testForR8(parameters.getBackend())
- .addProgramFiles(kotlinSources, ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(kotlinSources, ToolHelper.getKotlinStdlibJar(kotlinc))
.addKeepAttributes("SourceFile", "LineNumberTable")
.allowDiagnosticWarningMessages()
.setMode(CompilationMode.RELEASE)
@@ -160,10 +165,10 @@
throws ExecutionException, CompilationFailedException, IOException {
String main = "retrace.MainNestedKt";
String mainFileName = "MainNested.kt";
- Path kotlinSources = compilationResults.apply(parameters.getRuntime());
+ Path kotlinSources = compilationResults.getForConfiguration(kotlinc, targetVersion);
CodeInspector kotlinInspector = new CodeInspector(kotlinSources);
testForR8(parameters.getBackend())
- .addProgramFiles(kotlinSources, ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(kotlinSources, ToolHelper.getKotlinStdlibJar(kotlinc))
.addKeepAttributes("SourceFile", "LineNumberTable")
.allowDiagnosticWarningMessages()
.setMode(CompilationMode.RELEASE)
@@ -192,10 +197,10 @@
throws ExecutionException, CompilationFailedException, IOException {
String main = "retrace.MainNestedFirstLineKt";
String mainFileName = "MainNestedFirstLine.kt";
- Path kotlinSources = compilationResults.apply(parameters.getRuntime());
+ Path kotlinSources = compilationResults.getForConfiguration(kotlinc, targetVersion);
CodeInspector kotlinInspector = new CodeInspector(kotlinSources);
testForR8(parameters.getBackend())
- .addProgramFiles(kotlinSources, ToolHelper.getKotlinStdlibJar())
+ .addProgramFiles(kotlinSources, ToolHelper.getKotlinStdlibJar(kotlinc))
.addKeepAttributes("SourceFile", "LineNumberTable")
.allowDiagnosticWarningMessages()
.setMode(CompilationMode.RELEASE)
diff --git a/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionConfigurationKotlinTest.java b/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionConfigurationKotlinTest.java
index 0be3ece..64ea164 100644
--- a/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionConfigurationKotlinTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionConfigurationKotlinTest.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.rewrite.assertions;
-import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.not;
@@ -15,6 +15,7 @@
import com.android.tools.r8.AssertionsConfiguration;
import com.android.tools.r8.D8TestBuilder;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.KotlinTestBase;
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestParameters;
@@ -28,14 +29,11 @@
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
+import java.io.IOException;
import java.nio.file.Path;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import java.util.Objects;
import org.junit.Assume;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -47,51 +45,31 @@
@RunWith(Parameterized.class)
public class AssertionConfigurationKotlinTest extends KotlinTestBase implements Opcodes {
- private static class KotlinCompilationKey {
- KotlinTargetVersion targetVersion;
- boolean useJvmAssertions;
-
- private KotlinCompilationKey(KotlinTargetVersion targetVersion, boolean useJvmAssertions) {
- this.targetVersion = targetVersion;
- this.useJvmAssertions = useJvmAssertions;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(targetVersion, useJvmAssertions);
- }
-
- @Override
- public boolean equals(Object other) {
- if (other == null) {
- return false;
- }
- if (getClass() != other.getClass()) {
- return false;
- }
- KotlinCompilationKey kotlinCompilationKey = (KotlinCompilationKey) other;
- return targetVersion == kotlinCompilationKey.targetVersion
- && useJvmAssertions == kotlinCompilationKey.useJvmAssertions;
- }
- }
-
private static final Package pkg = AssertionConfigurationKotlinTest.class.getPackage();
private static final String kotlintestclasesPackage = pkg.getName() + ".kotlintestclasses";
private static final String testClassKt = kotlintestclasesPackage + ".TestClassKt";
private static final String class1 = kotlintestclasesPackage + ".Class1";
private static final String class2 = kotlintestclasesPackage + ".Class2";
- private static final Map<KotlinCompilationKey, Path> kotlinClasses = new HashMap<>();
+ private static final KotlinCompileMemoizer kotlinWithJvmAssertions =
+ getCompileMemoizer(getKotlinFilesForPackage())
+ .configure(kotlinCompilerTool -> kotlinCompilerTool.setUseJvmAssertions(true));
+ private static final KotlinCompileMemoizer kotlinWithoutJvmAssertions =
+ getCompileMemoizer(getKotlinFilesForPackage())
+ .configure(kotlinCompilerTool -> kotlinCompilerTool.setUseJvmAssertions(false));
+
private final TestParameters parameters;
private final boolean kotlinStdlibAsLibrary;
private final boolean useJvmAssertions;
- private final KotlinCompilationKey kotlinCompilationKey;
+ private final KotlinCompileMemoizer compiledForAssertions;
- @Parameterized.Parameters(name = "{0}, {1}, kotlin-stdlib as library: {2}, -Xassertions=jvm: {3}")
+ @Parameterized.Parameters(
+ name = "{0}, target: {1}, kotlinc: {2}, kotlin-stdlib as library: {3}, -Xassertions=jvm: {4}")
public static Collection<Object[]> data() {
return buildParameters(
getTestParameters().withAllRuntimesAndApiLevels().build(),
KotlinTargetVersion.values(),
+ getKotlinCompilers(),
BooleanUtils.values(),
BooleanUtils.values());
}
@@ -99,31 +77,27 @@
public AssertionConfigurationKotlinTest(
TestParameters parameters,
KotlinTargetVersion targetVersion,
+ KotlinCompiler kotlinc,
boolean kotlinStdlibAsClasspath,
boolean useJvmAssertions) {
- super(targetVersion);
+ super(targetVersion, kotlinc);
this.parameters = parameters;
this.kotlinStdlibAsLibrary = kotlinStdlibAsClasspath;
this.useJvmAssertions = useJvmAssertions;
- this.kotlinCompilationKey = new KotlinCompilationKey(targetVersion, useJvmAssertions);
+ this.compiledForAssertions =
+ useJvmAssertions ? kotlinWithJvmAssertions : kotlinWithoutJvmAssertions;
}
- @BeforeClass
- public static void compileKotlin() throws Exception {
- for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
- for (boolean useJvmAssertions : BooleanUtils.values()) {
- Path ktClasses =
- kotlinc(KOTLINC, targetVersion)
- .addSourceFiles(getKotlinFilesInTestPackage(pkg))
- .setUseJvmAssertions(useJvmAssertions)
- .compile();
- kotlinClasses.put(new KotlinCompilationKey(targetVersion, useJvmAssertions), ktClasses);
- }
+ private static List<Path> getKotlinFilesForPackage() {
+ try {
+ return getKotlinFilesInTestPackage(pkg);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
}
}
private Path kotlinStdlibLibraryForRuntime() throws Exception {
- Path kotlinStdlibCf = ToolHelper.getKotlinStdlibJar();
+ Path kotlinStdlibCf = ToolHelper.getKotlinStdlibJar(kotlinc);
if (parameters.getRuntime().isCf()) {
return kotlinStdlibCf;
}
@@ -144,8 +118,8 @@
throws Exception {
if (kotlinStdlibAsLibrary) {
testForD8()
- .addClasspathFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(kotlinClasses.get(kotlinCompilationKey))
+ .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinc, targetVersion))
.setMinApi(parameters.getApiLevel())
.apply(builderConsumer)
.addRunClasspathFiles(kotlinStdlibLibraryForRuntime())
@@ -156,8 +130,8 @@
.assertSuccessWithOutputLines(outputLines);
} else {
testForD8()
- .addProgramFiles(ToolHelper.getKotlinStdlibJar())
- .addProgramFiles(kotlinClasses.get(kotlinCompilationKey))
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinc, targetVersion))
.setMinApi(parameters.getApiLevel())
.apply(builderConsumer)
.run(
@@ -187,11 +161,11 @@
.applyIf(
kotlinStdlibAsLibrary,
b -> {
- b.addClasspathFiles(ToolHelper.getKotlinStdlibJar());
+ b.addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc));
b.addRunClasspathFiles(kotlinStdlibLibraryForRuntime());
},
- b -> b.addProgramFiles(ToolHelper.getKotlinStdlibJar()))
- .addProgramFiles(kotlinClasses.get(kotlinCompilationKey))
+ b -> b.addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc)))
+ .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinc, targetVersion))
.addKeepMainRule(testClassKt)
.addKeepClassAndMembersRules(class1, class2)
.setMinApi(parameters.getApiLevel())
@@ -476,7 +450,7 @@
public void testAssertionsForCfEnableWithStackMap() throws Exception {
Assume.assumeTrue(parameters.isCfRuntime());
Assume.assumeTrue(useJvmAssertions);
- Assume.assumeTrue(kotlinCompilationKey.targetVersion == KotlinTargetVersion.JAVA_8);
+ Assume.assumeTrue(targetVersion == KotlinTargetVersion.JAVA_8);
// Compile time enabling or disabling assertions means the -ea flag has no effect.
runR8Test(
builder -> {
@@ -554,7 +528,7 @@
Assume.assumeTrue(parameters.isDexRuntime());
testForD8()
.addProgramClassFileData(dumpModifiedKotlinAssertions())
- .addProgramFiles(kotlinClasses.get(kotlinCompilationKey))
+ .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinc, targetVersion))
.setMinApi(parameters.getApiLevel())
.addAssertionsConfiguration(AssertionsConfiguration.Builder::passthroughAllAssertions)
.run(
@@ -563,7 +537,7 @@
.assertSuccessWithOutputLines(noAllAssertionsExpectedLines());
testForD8()
.addProgramClassFileData(dumpModifiedKotlinAssertions())
- .addProgramFiles(kotlinClasses.get(kotlinCompilationKey))
+ .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinc, targetVersion))
.setMinApi(parameters.getApiLevel())
.addAssertionsConfiguration(AssertionsConfiguration.Builder::enableAllAssertions)
.run(
@@ -572,7 +546,7 @@
.assertSuccessWithOutputLines(allAssertionsExpectedLines());
testForD8()
.addProgramClassFileData(dumpModifiedKotlinAssertions())
- .addProgramFiles(kotlinClasses.get(kotlinCompilationKey))
+ .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinc, targetVersion))
.setMinApi(parameters.getApiLevel())
.addAssertionsConfiguration(AssertionsConfiguration.Builder::disableAllAssertions)
.run(
diff --git a/src/test/java/com/android/tools/r8/shaking/annotations/ReflectiveAnnotationUseTest.java b/src/test/java/com/android/tools/r8/shaking/annotations/ReflectiveAnnotationUseTest.java
index c975c82..c782621 100644
--- a/src/test/java/com/android/tools/r8/shaking/annotations/ReflectiveAnnotationUseTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/annotations/ReflectiveAnnotationUseTest.java
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.shaking.annotations;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
import static org.hamcrest.CoreMatchers.containsString;
@@ -12,6 +13,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assume.assumeTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.KotlinTestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
@@ -60,17 +62,21 @@
private final TestParameters parameters;
private final boolean minify;
- @Parameterized.Parameters(name = "{0} target: {1} minify: {2}")
+ @Parameterized.Parameters(name = "{0}, target: {1}, kotlinc: {2}, minify: {3}")
public static Collection<Object[]> data() {
return buildParameters(
getTestParameters().withAllRuntimesAndApiLevels().build(),
KotlinTargetVersion.values(),
+ getKotlinCompilers(),
BooleanUtils.values());
}
public ReflectiveAnnotationUseTest(
- TestParameters parameters, KotlinTargetVersion targetVersion, boolean minify) {
- super(targetVersion);
+ TestParameters parameters,
+ KotlinTargetVersion targetVersion,
+ KotlinCompiler kotlinc,
+ boolean minify) {
+ super(targetVersion, kotlinc);
this.parameters = parameters;
this.minify = minify;
}