Extend Kotlin testing to support both types of Koltin lambdas

Running all tests with kotlinc generated classes which has been the
default and the only lambda generation tested.

Next step will be to test both types of Kotlin lambdas.

Change-Id: Ic1ea3b797158fc369a94207810028629bb9fe5c8
Fixes: b/326221468
diff --git a/src/test/java/com/android/tools/r8/KotlinCompilerTool.java b/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
index 1075fd9..c548593 100644
--- a/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
+++ b/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_1_9_21;
 import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.MAX_SUPPORTED_VERSION;
 import static com.android.tools.r8.ToolHelper.isWindows;
 import static com.google.common.io.Files.getNameWithoutExtension;
@@ -68,22 +69,24 @@
   }
 
   public enum KotlinCompilerVersion implements Ordered<KotlinCompilerVersion> {
-    KOTLINC_1_3_72("kotlin-compiler-1.3.72"),
-    KOTLINC_1_4_20("kotlin-compiler-1.4.20"),
-    KOTLINC_1_5_0("kotlin-compiler-1.5.0"),
-    KOTLINC_1_6_0("kotlin-compiler-1.6.0"),
-    KOTLINC_1_7_0("kotlin-compiler-1.7.0"),
-    KOTLINC_1_8_0("kotlin-compiler-1.8.0"),
-    KOTLINC_1_9_21("kotlin-compiler-1.9.21"),
-    KOTLIN_DEV("kotlin-compiler-dev");
+    KOTLINC_1_3_72("kotlin-compiler-1.3.72", KotlinLambdaGeneration.CLASS),
+    KOTLINC_1_4_20("kotlin-compiler-1.4.20", KotlinLambdaGeneration.CLASS),
+    KOTLINC_1_5_0("kotlin-compiler-1.5.0", KotlinLambdaGeneration.CLASS),
+    KOTLINC_1_6_0("kotlin-compiler-1.6.0", KotlinLambdaGeneration.CLASS),
+    KOTLINC_1_7_0("kotlin-compiler-1.7.0", KotlinLambdaGeneration.CLASS),
+    KOTLINC_1_8_0("kotlin-compiler-1.8.0", KotlinLambdaGeneration.CLASS),
+    KOTLINC_1_9_21("kotlin-compiler-1.9.21", KotlinLambdaGeneration.CLASS),
+    KOTLIN_DEV("kotlin-compiler-dev", KotlinLambdaGeneration.INVOKE_DYNAMIC);
 
     public static final KotlinCompilerVersion MIN_SUPPORTED_VERSION = KOTLINC_1_7_0;
     public static final KotlinCompilerVersion MAX_SUPPORTED_VERSION = KOTLINC_1_9_21;
 
     private final String folder;
+    private final KotlinLambdaGeneration defaultLambdaGeneration;
 
-    KotlinCompilerVersion(String folder) {
+    KotlinCompilerVersion(String folder, KotlinLambdaGeneration defaultLambdaGeneration) {
       this.folder = folder;
+      this.defaultLambdaGeneration = defaultLambdaGeneration;
     }
 
     public static KotlinCompilerVersion latest() {
@@ -104,6 +107,41 @@
     }
   }
 
+  public enum KotlinLambdaGeneration {
+    CLASS,
+    INVOKE_DYNAMIC;
+
+    public String getKotlincFlag() {
+      if (this == CLASS) {
+        return "-Xlambdas=class";
+      } else {
+        assert this == INVOKE_DYNAMIC;
+        return "-Xlambdas=indy";
+      }
+    }
+
+    public void apply(KotlinCompilerTool compiler) {
+      if (this == CLASS) {
+        compiler.generateLambdaClasses();
+      } else {
+        assert this == INVOKE_DYNAMIC;
+        compiler.generateInvokeDynamic();
+      }
+    }
+
+    public boolean isClass() {
+      return this == CLASS;
+    }
+
+    public boolean isInvokeDynamic() {
+      return this == INVOKE_DYNAMIC;
+    }
+
+    public boolean isDefaultForVersion(KotlinCompilerVersion version) {
+      return this == version.defaultLambdaGeneration;
+    }
+  }
+
   public static final class KotlinCompiler {
 
     private final String name;
@@ -188,6 +226,7 @@
   private final TestState state;
   private final KotlinCompiler compiler;
   private final KotlinTargetVersion targetVersion;
+  private final KotlinLambdaGeneration lambdaGeneration;
   private final List<Path> sources = new ArrayList<>();
   private final List<Path> classpath = new ArrayList<>();
   private final List<String> additionalArguments = new ArrayList<>();
@@ -197,11 +236,16 @@
   private Path output = null;
 
   private KotlinCompilerTool(
-      CfRuntime jdk, TestState state, KotlinCompiler compiler, KotlinTargetVersion targetVersion) {
+      CfRuntime jdk,
+      TestState state,
+      KotlinCompiler kotlinCompiler,
+      KotlinTargetVersion kotlinTargetVersion,
+      KotlinLambdaGeneration lambdaGeneration) {
     this.jdk = jdk;
     this.state = state;
-    this.compiler = compiler;
-    this.targetVersion = targetVersion;
+    this.compiler = kotlinCompiler;
+    this.targetVersion = kotlinTargetVersion;
+    this.lambdaGeneration = lambdaGeneration;
   }
 
   public KotlinCompiler getCompiler() {
@@ -212,20 +256,18 @@
     return targetVersion;
   }
 
-  public static KotlinCompilerTool create(
-      CfRuntime jdk,
-      TemporaryFolder temp,
-      KotlinCompiler kotlinCompiler,
-      KotlinTargetVersion kotlinTargetVersion) {
-    return create(jdk, new TestState(temp), kotlinCompiler, kotlinTargetVersion);
+  public KotlinLambdaGeneration getLambdaGeneration() {
+    return lambdaGeneration;
   }
 
   public static KotlinCompilerTool create(
       CfRuntime jdk,
-      TestState state,
+      TemporaryFolder temp,
       KotlinCompiler kotlinCompiler,
-      KotlinTargetVersion kotlinTargetVersion) {
-    return new KotlinCompilerTool(jdk, state, kotlinCompiler, kotlinTargetVersion);
+      KotlinTargetVersion kotlinTargetVersion,
+      KotlinLambdaGeneration lambdaGeneration) {
+    return new KotlinCompilerTool(
+        jdk, new TestState(temp), kotlinCompiler, kotlinTargetVersion, lambdaGeneration);
   }
 
   public KotlinCompilerTool addArguments(String... arguments) {
@@ -268,6 +310,22 @@
     return this;
   }
 
+  // This forces using invokedynamic for Kotlin lambdas.
+  public KotlinCompilerTool generateLambdaClasses() {
+    assert !additionalArguments.contains(KotlinLambdaGeneration.CLASS.getKotlincFlag())
+        && !additionalArguments.contains(KotlinLambdaGeneration.INVOKE_DYNAMIC.getKotlincFlag());
+    addArguments(KotlinLambdaGeneration.CLASS.getKotlincFlag());
+    return this;
+  }
+
+  // This forces generation kotlinc of lambda classes for Kotlin lambdas
+  public KotlinCompilerTool generateInvokeDynamic() {
+    assert !additionalArguments.contains(KotlinLambdaGeneration.CLASS.getKotlincFlag())
+        && !additionalArguments.contains(KotlinLambdaGeneration.INVOKE_DYNAMIC.getKotlincFlag());
+    addArguments(KotlinLambdaGeneration.INVOKE_DYNAMIC.getKotlincFlag());
+    return this;
+  }
+
   public KotlinCompilerTool disableAssertions() {
     this.enableAssertions = false;
     return this;
@@ -398,6 +456,7 @@
     cmdline.add(jdk.getJavaHome().toString());
     cmdline.add("-jvm-target");
     cmdline.add(targetVersion.getJvmTargetString());
+    cmdline.add(lambdaGeneration.getKotlincFlag());
     // Until now this is just command line files, no inputs, hash existing command
     String noneFileCommandLineArguments = StringUtils.join("", cmdline);
     commandLineAndHasherConsumers.hasherConsumers.add(
@@ -429,6 +488,4 @@
         hasher -> additionalArguments.forEach(s -> hasher.putString(s, StandardCharsets.UTF_8)));
     return commandLineAndHasherConsumers;
   }
-
-
 }
diff --git a/src/test/java/com/android/tools/r8/KotlinTestBase.java b/src/test/java/com/android/tools/r8/KotlinTestBase.java
index a98d7f0..1d2d8c2 100644
--- a/src/test/java/com/android/tools/r8/KotlinTestBase.java
+++ b/src/test/java/com/android/tools/r8/KotlinTestBase.java
@@ -7,6 +7,7 @@
 import static org.hamcrest.CoreMatchers.containsString;
 
 import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
+import com.android.tools.r8.KotlinCompilerTool.KotlinLambdaGeneration;
 import com.android.tools.r8.KotlinCompilerTool.KotlinTargetVersion;
 import com.android.tools.r8.TestRuntime.CfRuntime;
 import com.android.tools.r8.utils.DescriptorUtils;
@@ -22,6 +23,7 @@
 import java.util.IdentityHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
 import org.junit.rules.TemporaryFolder;
@@ -43,11 +45,13 @@
 
   protected final KotlinCompiler kotlinc;
   protected final KotlinTargetVersion targetVersion;
+  protected final KotlinLambdaGeneration lambdaGeneration;
   protected final KotlinTestParameters kotlinParameters;
 
   protected KotlinTestBase(KotlinTestParameters kotlinParameters) {
     this.targetVersion = kotlinParameters.getTargetVersion();
     this.kotlinc = kotlinParameters.getCompiler();
+    this.lambdaGeneration = kotlinParameters.getLambdaGeneration();
     this.kotlinParameters = kotlinParameters;
   }
 
@@ -94,7 +98,8 @@
   }
 
   protected KotlinCompilerTool kotlinCompilerTool() {
-    return KotlinCompilerTool.create(CfRuntime.getCheckedInJdk9(), temp, kotlinc, targetVersion);
+    return KotlinCompilerTool.create(
+        CfRuntime.getCheckedInJdk9(), temp, kotlinc, targetVersion, lambdaGeneration);
   }
 
   public static KotlinCompileMemoizer getCompileMemoizer(Path... source) {
@@ -144,12 +149,40 @@
 
   public static class KotlinCompileMemoizer {
 
+    static class CompilerConfigurationKey {
+      private final KotlinTargetVersion targetVersion;
+      private final KotlinLambdaGeneration lambdaGeneration;
+
+      private CompilerConfigurationKey(
+          KotlinTargetVersion targetVersion, KotlinLambdaGeneration lambdaGeneration) {
+        this.targetVersion = targetVersion;
+        this.lambdaGeneration = lambdaGeneration;
+      }
+
+      @Override
+      public boolean equals(Object o) {
+        if (this == o) {
+          return true;
+        }
+        if (!(o instanceof CompilerConfigurationKey)) {
+          return false;
+        }
+        CompilerConfigurationKey other = (CompilerConfigurationKey) o;
+        return targetVersion == other.targetVersion && lambdaGeneration == other.lambdaGeneration;
+      }
+
+      @Override
+      public int hashCode() {
+        return Objects.hash(targetVersion, lambdaGeneration);
+      }
+    }
+
     private final Collection<Path> sources;
     private final CfRuntime runtime;
     private final TemporaryFolder temporaryFolder;
 
     private Consumer<KotlinCompilerTool> kotlinCompilerToolConsumer = x -> {};
-    private final Map<KotlinCompiler, Map<KotlinTargetVersion, Path>> compiledPaths =
+    private final Map<KotlinCompiler, Map<CompilerConfigurationKey, Path>> compiledPaths =
         new IdentityHashMap<>();
 
     public KotlinCompileMemoizer(Collection<Path> sources) {
@@ -170,23 +203,30 @@
 
     public Path getForConfiguration(KotlinTestParameters kotlinParameters) {
       return getForConfiguration(
-          kotlinParameters.getCompiler(), kotlinParameters.getTargetVersion());
+          kotlinParameters.getCompiler(),
+          kotlinParameters.getTargetVersion(),
+          kotlinParameters.getLambdaGeneration());
     }
 
-    public Path getForConfiguration(KotlinCompiler compiler, KotlinTargetVersion targetVersion) {
-      Map<KotlinTargetVersion, Path> kotlinTargetVersionPathMap = compiledPaths.get(compiler);
+    public Path getForConfiguration(
+        KotlinCompiler compiler,
+        KotlinTargetVersion targetVersion,
+        KotlinLambdaGeneration lambdaGeneration) {
+      assert lambdaGeneration == KotlinLambdaGeneration.CLASS;
+      Map<CompilerConfigurationKey, Path> kotlinTargetVersionPathMap = compiledPaths.get(compiler);
       if (kotlinTargetVersionPathMap == null) {
         kotlinTargetVersionPathMap = new IdentityHashMap<>();
         compiledPaths.put(compiler, kotlinTargetVersionPathMap);
       }
       return kotlinTargetVersionPathMap.computeIfAbsent(
-          targetVersion,
+          new CompilerConfigurationKey(targetVersion, lambdaGeneration),
           ignored -> {
             try {
               KotlinCompilerTool kotlinc =
                   temporaryFolder == null
-                      ? kotlinc(compiler, targetVersion)
-                      : kotlinc(runtime, temporaryFolder, compiler, targetVersion);
+                      ? kotlinc(runtime, compiler, targetVersion, lambdaGeneration)
+                      : kotlinc(
+                          runtime, temporaryFolder, compiler, targetVersion, lambdaGeneration);
               return kotlinc.addSourceFiles(sources).apply(kotlinCompilerToolConsumer).compile();
             } catch (IOException e) {
               throw new RuntimeException(e);
diff --git a/src/test/java/com/android/tools/r8/KotlinTestParameters.java b/src/test/java/com/android/tools/r8/KotlinTestParameters.java
index 0002260..251d579 100644
--- a/src/test/java/com/android/tools/r8/KotlinTestParameters.java
+++ b/src/test/java/com/android/tools/r8/KotlinTestParameters.java
@@ -7,6 +7,7 @@
 
 import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
 import com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion;
+import com.android.tools.r8.KotlinCompilerTool.KotlinLambdaGeneration;
 import com.android.tools.r8.KotlinCompilerTool.KotlinTargetVersion;
 import com.google.common.collect.ImmutableList;
 import java.util.ArrayList;
@@ -20,12 +21,17 @@
   private final int index;
   private final KotlinCompiler kotlinc;
   private final KotlinTargetVersion targetVersion;
+  private final KotlinLambdaGeneration lambdaGeneration;
 
   private KotlinTestParameters(
-      KotlinCompiler kotlinc, KotlinTargetVersion targetVersion, int index) {
+      KotlinCompiler kotlinc,
+      KotlinTargetVersion targetVersion,
+      KotlinLambdaGeneration lambdaGeneration,
+      int index) {
     this.index = index;
     this.kotlinc = kotlinc;
     this.targetVersion = targetVersion;
+    this.lambdaGeneration = lambdaGeneration;
   }
 
   public KotlinCompiler getCompiler() {
@@ -40,6 +46,10 @@
     return targetVersion;
   }
 
+  public KotlinLambdaGeneration getLambdaGeneration() {
+    return lambdaGeneration;
+  }
+
   public boolean is(KotlinCompilerVersion compilerVersion) {
     return kotlinc.is(compilerVersion);
   }
@@ -74,7 +84,7 @@
 
   @Override
   public String toString() {
-    return kotlinc + "[target=" + targetVersion + "]";
+    return kotlinc + "[target=" + targetVersion + ",lambda=" + lambdaGeneration + "]";
   }
 
   public static class Builder {
@@ -82,6 +92,7 @@
     private Predicate<KotlinCompilerVersion> compilerFilter = c -> false;
     private Predicate<KotlinCompilerVersion> oldCompilerFilter = c -> true;
     private Predicate<KotlinTargetVersion> targetVersionFilter = t -> false;
+    private Predicate<KotlinLambdaGeneration> lambdaGenerationFilter = t -> false;
     private boolean withDevCompiler =
         System.getProperty("com.android.tools.r8.kotlincompilerdev") != null;
     private boolean withOldCompilers =
@@ -99,17 +110,30 @@
       return this;
     }
 
+    private Builder withLambdaGenerationFilter(Predicate<KotlinLambdaGeneration> predicate) {
+      lambdaGenerationFilter = lambdaGenerationFilter.or(predicate);
+      return this;
+    }
+
     public Builder withAllCompilers() {
-      withCompilerFilter(compiler -> true);
+      withCompilerFilter(compiler -> true)
+          .withLambdaGenerationFilter(KotlinLambdaGeneration::isClass);
+      return this;
+    }
+
+    public Builder withAllLambdaGeneration() {
+      withLambdaGenerationFilter(lambdaGeneration -> true);
       return this;
     }
 
     public Builder withAllCompilersAndTargetVersions() {
+      // Default to what used to be the default until Kotlin 2.0.
       return withAllCompilers().withAllTargetVersions();
     }
 
     public Builder withCompiler(KotlinCompilerVersion compilerVersion) {
-      withCompilerFilter(c -> c.isEqualTo(compilerVersion));
+      withCompilerFilter(c -> c.isEqualTo(compilerVersion))
+          .withLambdaGenerationFilter(KotlinLambdaGeneration::isClass);
       return this;
     }
 
@@ -153,7 +177,8 @@
     }
 
     public Builder withCompilersStartingFromIncluding(KotlinCompilerVersion version) {
-      withCompilerFilter(c -> c.isGreaterThanOrEqualTo(version));
+      withCompilerFilter(c -> c.isGreaterThanOrEqualTo(version))
+          .withLambdaGenerationFilter(KotlinLambdaGeneration::isClass);
       return this;
     }
 
@@ -177,16 +202,31 @@
       }
       for (KotlinCompilerVersion kotlinVersion : compilerVersions) {
         for (KotlinTargetVersion targetVersion : KotlinTargetVersion.values()) {
-          // KotlinTargetVersion java 6 is deprecated from kotlinc 1.5 and forward, no need to run
-          // tests on that target.
-          if (targetVersion == KotlinTargetVersion.JAVA_6
-              && kotlinVersion.isGreaterThanOrEqualTo(KotlinCompilerVersion.KOTLINC_1_5_0)) {
-            continue;
-          }
-          if (targetVersionFilter.test(targetVersion)) {
-            testParameters.add(
-                new KotlinTestParameters(
-                    new KotlinCompiler(kotlinVersion), targetVersion, index++));
+          for (KotlinLambdaGeneration lambdaGeneration : KotlinLambdaGeneration.values()) {
+            // KotlinTargetVersion java 6 is deprecated from kotlinc 1.5 and forward, no need to run
+            // tests on that target.
+            if (targetVersion == KotlinTargetVersion.JAVA_6
+                && kotlinVersion.isGreaterThanOrEqualTo(KotlinCompilerVersion.KOTLINC_1_5_0)) {
+              continue;
+            }
+            // Only test lambda both types of lambda generation with the latest version and the dev
+            // version.
+            assert KotlinCompilerVersion.KOTLIN_DEV.isGreaterThan(
+                KotlinCompilerVersion.MAX_SUPPORTED_VERSION);
+            if (!lambdaGeneration.isDefaultForVersion(kotlinVersion)
+                && kotlinVersion.isLessThan(KotlinCompilerVersion.MAX_SUPPORTED_VERSION)) {
+              continue;
+            }
+            if (targetVersionFilter.test(targetVersion)) {
+              if (lambdaGenerationFilter.test(lambdaGeneration)) {
+                testParameters.add(
+                    new KotlinTestParameters(
+                        new KotlinCompiler(kotlinVersion),
+                        targetVersion,
+                        lambdaGeneration,
+                        index++));
+              }
+            }
           }
         }
       }
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/java/com/android/tools/r8/TestBase.java
index 620dc0a..4cf67ce 100644
--- a/src/test/java/com/android/tools/r8/TestBase.java
+++ b/src/test/java/com/android/tools/r8/TestBase.java
@@ -16,6 +16,7 @@
 import com.android.tools.r8.ClassFileConsumer.ArchiveConsumer;
 import com.android.tools.r8.DataResourceProvider.Visitor;
 import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
+import com.android.tools.r8.KotlinCompilerTool.KotlinLambdaGeneration;
 import com.android.tools.r8.KotlinCompilerTool.KotlinTargetVersion;
 import com.android.tools.r8.TestRuntime.CfRuntime;
 import com.android.tools.r8.TestRuntime.CfVm;
@@ -355,26 +356,52 @@
       CfRuntime jdk,
       TemporaryFolder temp,
       KotlinCompiler kotlinCompiler,
-      KotlinTargetVersion kotlinTargetVersion) {
+      KotlinTargetVersion kotlinTargetVersion,
+      KotlinLambdaGeneration lambdaGeneration) {
     // TODO(b/227161720): Kotlinc fails to run on JDK17.
     if (jdk.isNewerThanOrEqual(CfVm.JDK17)) {
       jdk = TestRuntime.getCheckedInJdk9();
     }
-    return KotlinCompilerTool.create(jdk, temp, kotlinCompiler, kotlinTargetVersion);
+    return KotlinCompilerTool.create(
+        jdk, temp, kotlinCompiler, kotlinTargetVersion, lambdaGeneration);
   }
 
   public static KotlinCompilerTool kotlinc(
-      KotlinCompiler kotlinCompiler, KotlinTargetVersion kotlinTargetVersion) {
-    return kotlinc(TestRuntime.getCheckedInJdk9(), staticTemp, kotlinCompiler, kotlinTargetVersion);
-  }
-
-  public KotlinCompilerTool kotlinc(
-      CfRuntime jdk, KotlinCompiler kotlinCompiler, KotlinTargetVersion kotlinTargetVersion) {
+      CfRuntime jdk,
+      KotlinCompiler kotlinCompiler,
+      KotlinTargetVersion kotlinTargetVersion,
+      KotlinLambdaGeneration lambdaGeneration) {
     // TODO(b/227161720): Kotlinc fails to run on JDK17.
     if (jdk.isNewerThanOrEqual(CfVm.JDK17)) {
       jdk = TestRuntime.getCheckedInJdk9();
     }
-    return KotlinCompilerTool.create(jdk, temp, kotlinCompiler, kotlinTargetVersion);
+    return KotlinCompilerTool.create(
+        jdk, staticTemp, kotlinCompiler, kotlinTargetVersion, lambdaGeneration);
+  }
+
+  public static KotlinCompilerTool kotlinc(
+      KotlinCompiler kotlinCompiler,
+      KotlinTargetVersion kotlinTargetVersion,
+      KotlinLambdaGeneration kotlinLambdaGeneration) {
+    return kotlinc(
+        TestRuntime.getCheckedInJdk9(),
+        staticTemp,
+        kotlinCompiler,
+        kotlinTargetVersion,
+        kotlinLambdaGeneration);
+  }
+
+  public KotlinCompilerTool kotlinc(CfRuntime jdk, KotlinTestParameters testParameters) {
+    // TODO(b/227161720): Kotlinc fails to run on JDK17.
+    if (jdk.isNewerThanOrEqual(CfVm.JDK17)) {
+      jdk = TestRuntime.getCheckedInJdk9();
+    }
+    return kotlinc(
+        jdk,
+        temp,
+        testParameters.getCompiler(),
+        testParameters.getTargetVersion(),
+        testParameters.getLambdaGeneration());
   }
 
   public static ClassFileTransformer transformer(Class<?> clazz) throws IOException {
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 d9f22f7..91070b0 100644
--- a/src/test/java/com/android/tools/r8/annotations/SourceDebugExtensionTest.java
+++ b/src/test/java/com/android/tools/r8/annotations/SourceDebugExtensionTest.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
-import com.android.tools.r8.KotlinCompilerTool.KotlinTargetVersion;
 import com.android.tools.r8.KotlinTestBase;
 import com.android.tools.r8.KotlinTestParameters;
 import com.android.tools.r8.TestBase;
@@ -56,7 +55,8 @@
                 KotlinTestBase.getKotlincHostRuntime(parameters.getRuntime()),
                 getStaticTemp(),
                 kotlinc,
-                KotlinTargetVersion.JAVA_8)
+                kotlinTestParameters.getTargetVersion(),
+                kotlinTestParameters.getLambdaGeneration())
             .addSourceFiles(
                 getFilesInTestFolderRelativeToClass(
                     KotlinInlineFunctionRetraceTest.class, "kt", ".kt"))
diff --git a/src/test/java/com/android/tools/r8/cf/bootstrap/KotlinCompilerTreeShakingTest.java b/src/test/java/com/android/tools/r8/cf/bootstrap/KotlinCompilerTreeShakingTest.java
index 1ffd2e4..a538342 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
@@ -7,7 +7,6 @@
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
-import com.android.tools.r8.KotlinCompilerTool.KotlinTargetVersion;
 import com.android.tools.r8.KotlinTestBase;
 import com.android.tools.r8.KotlinTestParameters;
 import com.android.tools.r8.TestParameters;
@@ -61,7 +60,8 @@
         kotlinc(
                 KotlinTestBase.getKotlincHostRuntime(parameters.getRuntime()),
                 kotlinTestParameters.getCompiler(),
-                kotlinTestParameters.getTargetVersion())
+                kotlinTestParameters.getTargetVersion(),
+                kotlinTestParameters.getLambdaGeneration())
             .addSourceFiles(HELLO_KT)
             .setOutputPath(temp.newFolder().toPath())
             .compile();
@@ -129,7 +129,8 @@
                 parameters.getRuntime().asCf(),
                 new KotlinCompiler(
                     "r8ProcessedKotlinc", r8ProcessedKotlinc, kotlinc.getCompilerVersion()),
-                KotlinTargetVersion.JAVA_8)
+                kotlinTestParameters.getTargetVersion(),
+                kotlinTestParameters.getLambdaGeneration())
             .addSourceFiles(HELLO_KT)
             .setOutputPath(temp.newFolder().toPath())
             .compile();
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 575781e..d00c02b 100644
--- a/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
+++ b/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
@@ -239,7 +239,7 @@
     Path kotlinJarFile =
         getCompileMemoizer(getKotlinFilesInResource(folder), folder)
             .configure(kotlinCompilerTool -> kotlinCompilerTool.includeRuntime().noReflect())
-            .getForConfiguration(kotlinc, targetVersion);
+            .getForConfiguration(kotlinParameters);
 
     // Build classpath for compilation (and java execution)
     classpath.clear();
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 6f65db0..f43ed41 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinDuplicateAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinDuplicateAnnotationTest.java
@@ -77,7 +77,7 @@
     assumeTrue("test DEX", parameters.isDexRuntime());
     try {
       testForR8(parameters.getBackend())
-          .addProgramFiles(compiledJars.getForConfiguration(kotlinc, targetVersion))
+          .addProgramFiles(compiledJars.getForConfiguration(kotlinParameters))
           .addKeepMainRule(MAIN)
           .addKeepRules(KEEP_RULES)
           .addDontObfuscate()
@@ -94,7 +94,7 @@
   public void test_cf() throws Exception {
     assumeTrue("test CF", parameters.isCfRuntime());
     testForR8(parameters.getBackend())
-        .addProgramFiles(compiledJars.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compiledJars.getForConfiguration(kotlinParameters))
         .addKeepMainRule(MAIN)
         .addKeepRules(KEEP_RULES)
         .addDontObfuscate()
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
index 9e7c52a..5e56ea3 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
@@ -56,8 +56,7 @@
   public void test() throws Exception {
     testForR8(parameters.getBackend())
         .addProgramFiles(
-            compiledJars.getForConfiguration(kotlinc, targetVersion),
-            kotlinc.getKotlinAnnotationJar())
+            compiledJars.getForConfiguration(kotlinParameters), kotlinc.getKotlinAnnotationJar())
         .addKeepMainRule(MAIN)
         .allowAccessModification(allowAccessModification)
         .allowDiagnosticWarningMessages()
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 8ab102d..9a07fcc 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
@@ -56,8 +56,7 @@
   public void b139432507() throws Exception {
     testForR8(parameters.getBackend())
         .addProgramFiles(
-            compiledJars.getForConfiguration(kotlinc, targetVersion),
-            kotlinc.getKotlinAnnotationJar())
+            compiledJars.getForConfiguration(kotlinParameters), kotlinc.getKotlinAnnotationJar())
         .addKeepRules(
             StringUtils.lines(
                 "-keepclasseswithmembers class " + MAIN + "{", "  public static *** *(...);", "}"))
@@ -109,8 +108,7 @@
       throws Exception {
     testForR8(parameters.getBackend())
         .addProgramFiles(
-            compiledJars.getForConfiguration(kotlinc, targetVersion),
-            kotlinc.getKotlinAnnotationJar())
+            compiledJars.getForConfiguration(kotlinParameters), kotlinc.getKotlinAnnotationJar())
         .addKeepRules(
             StringUtils.lines(
                 "-keepclasseswithmembers class " + MAIN + "{",
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 4f334aa..a5b62a8 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
@@ -104,7 +104,7 @@
   }
 
   private Path compileTestSources(Path baseJar) throws Exception {
-    return kotlinc(kotlinc, targetVersion)
+    return kotlinc(kotlinc, targetVersion, lambdaGeneration)
         .addArguments(
             "-Xuse-experimental=kotlinx.coroutines.InternalCoroutinesApi",
             "-Xuse-experimental=kotlinx.coroutines.ObsoleteCoroutinesApi",
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 79aef01..5b0c7fd 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
@@ -42,7 +42,11 @@
     String pkg = getClass().getPackage().getName();
     String folder = DescriptorUtils.getBinaryNameFromJavaType(pkg);
     Path ktClasses =
-        kotlinc(getKotlincHostRuntime(parameters.getRuntime()), kotlinc, targetVersion)
+        kotlinc(
+                getKotlincHostRuntime(parameters.getRuntime()),
+                kotlinc,
+                targetVersion,
+                lambdaGeneration)
             .addSourceFiles(getKotlinFileInTest(folder, "b143165163"))
             .compile();
     testForR8(parameters.getBackend())
@@ -66,7 +70,11 @@
     String pkg = getClass().getPackage().getName();
     String folder = DescriptorUtils.getBinaryNameFromJavaType(pkg);
     Path ktClasses =
-        kotlinc(getKotlincHostRuntime(parameters.getRuntime()), kotlinc, targetVersion)
+        kotlinc(
+                getKotlincHostRuntime(parameters.getRuntime()),
+                kotlinc,
+                targetVersion,
+                lambdaGeneration)
             .addSourceFiles(getKotlinFileInTest(folder, "b143165163"))
             .compile();
     testForR8(parameters.getBackend())
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingCapturesKotlinStyleTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingCapturesKotlinStyleTest.java
index 3987eeb..106f66c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingCapturesKotlinStyleTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingCapturesKotlinStyleTest.java
@@ -165,7 +165,7 @@
     Path kotlinJarFile =
         getCompileMemoizer(getKotlinFilesInResource(getTestName()), getTestName())
             .configure(kotlinCompilerTool -> kotlinCompilerTool.includeRuntime().noReflect())
-            .getForConfiguration(kotlinc, targetVersion);
+            .getForConfiguration(kotlinParameters);
     return ImmutableList.of(kotlinJarFile, getJavaJarFile(), kotlinc.getKotlinAnnotationJar());
   }
 
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 54b5c1f..c1fa946 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
@@ -44,8 +44,7 @@
     testForR8(parameters.getBackend())
         .setMode(CompilationMode.DEBUG)
         .addProgramFiles(
-            compiledJars.getForConfiguration(kotlinc, kotlinParameters.getTargetVersion()),
-            kotlinc.getKotlinAnnotationJar())
+            compiledJars.getForConfiguration(kotlinParameters), kotlinc.getKotlinAnnotationJar())
         .addProgramFiles(getJavaJarFile(FOLDER))
         .setMinApi(parameters)
         .addKeepMainRule(MAIN_CLASS)
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingKeepAttributesKotlinStyleTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingKeepAttributesKotlinStyleTest.java
index 023c98d..2f176545 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingKeepAttributesKotlinStyleTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingKeepAttributesKotlinStyleTest.java
@@ -144,7 +144,7 @@
     Path kotlinJarFile =
         getCompileMemoizer(getKotlinFilesInResource(getTestName()), getTestName())
             .configure(kotlinCompilerTool -> kotlinCompilerTool.includeRuntime().noReflect())
-            .getForConfiguration(kotlinc, targetVersion);
+            .getForConfiguration(kotlinParameters);
     return ImmutableList.of(kotlinJarFile, getJavaJarFile(), kotlinc.getKotlinAnnotationJar());
   }
 
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingSingletonTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingSingletonTest.java
index 2007fa0..35aa6b9 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingSingletonTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingSingletonTest.java
@@ -144,7 +144,7 @@
     Path kotlinJarFile =
         getCompileMemoizer(getKotlinFilesInResource(getTestName()), getTestName())
             .configure(kotlinCompilerTool -> kotlinCompilerTool.includeRuntime().noReflect())
-            .getForConfiguration(kotlinc, targetVersion);
+            .getForConfiguration(kotlinParameters);
     return ImmutableList.of(kotlinJarFile, getJavaJarFile(), kotlinc.getKotlinAnnotationJar());
   }
 
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialJavaStyleTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialJavaStyleTest.java
index 5132240..fa2f7b8 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialJavaStyleTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialJavaStyleTest.java
@@ -205,7 +205,7 @@
     Path kotlinJarFile =
         getCompileMemoizer(getKotlinFilesInResource(getTestName()), getTestName())
             .configure(kotlinCompilerTool -> kotlinCompilerTool.includeRuntime().noReflect())
-            .getForConfiguration(kotlinc, targetVersion);
+            .getForConfiguration(kotlinParameters);
     return ImmutableList.of(kotlinJarFile, getJavaJarFile(), kotlinc.getKotlinAnnotationJar());
   }
 
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialKotlinStyleTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialKotlinStyleTest.java
index e08bbac..7edd51c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialKotlinStyleTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTrivialKotlinStyleTest.java
@@ -154,7 +154,7 @@
     Path kotlinJarFile =
         getCompileMemoizer(getKotlinFilesInResource(getTestName()), getTestName())
             .configure(kotlinCompilerTool -> kotlinCompilerTool.includeRuntime().noReflect())
-            .getForConfiguration(kotlinc, targetVersion);
+            .getForConfiguration(kotlinParameters);
     return ImmutableList.of(kotlinJarFile, getJavaJarFile(), kotlinc.getKotlinAnnotationJar());
   }
 
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 65a77da..f67a5fd 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
@@ -40,7 +40,9 @@
                 // Compile the feature Kotlin code with the base classes on classpath.
                 kotlinCompilerTool.addClasspathFiles(
                     kotlinBaseClasses.getForConfiguration(
-                        kotlinCompilerTool.getCompiler(), kotlinCompilerTool.getTargetVersion()));
+                        kotlinCompilerTool.getCompiler(),
+                        kotlinCompilerTool.getTargetVersion(),
+                        kotlinCompilerTool.getLambdaGeneration()));
               });
   private final TestParameters parameters;
 
@@ -75,7 +77,7 @@
     R8TestCompileResult compileResult =
         testForR8(parameters.getBackend())
             .addProgramFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(kotlinBaseClasses.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(kotlinBaseClasses.getForConfiguration(kotlinParameters))
             .addProgramClasses(FeatureAPI.class)
             .addKeepMainRule(baseKtClassName)
             .addKeepClassAndMembersRules(baseClassName)
@@ -96,8 +98,7 @@
                     builder
                         .addProgramResourceProvider(
                             ArchiveResourceProvider.fromArchive(
-                                kotlinFeatureClasses.getForConfiguration(kotlinc, targetVersion),
-                                true))
+                                kotlinFeatureClasses.getForConfiguration(kotlinParameters), true))
                         .setProgramConsumer(new ArchiveConsumer(featureCode, false))
                         .build())
             .allowDiagnosticWarningMessages()
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 2724d76..c7cc53c 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
@@ -57,7 +57,7 @@
     CfRuntime cfRuntime =
         parameters.isCfRuntime() ? parameters.getRuntime().asCf() : TestRuntime.getCheckedInJdk9();
     Path ktClasses =
-        kotlinc(cfRuntime, kotlinc, targetVersion)
+        kotlinc(cfRuntime, kotlinParameters)
             .addSourceFiles(getKotlinFileInTest(folder, "Simple"))
             .compile();
     testForR8(parameters.getBackend())
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataFirstToLatestTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataFirstToLatestTest.java
index cc58dbe..a971a26 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataFirstToLatestTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataFirstToLatestTest.java
@@ -61,7 +61,7 @@
   public void smokeTest() throws Exception {
     runTest(
         KotlinCompilerVersion.MAX_SUPPORTED_VERSION,
-        libJars.getForConfiguration(kotlinc, targetVersion),
+        libJars.getForConfiguration(kotlinParameters),
         kotlinc.getKotlinStdlibJar());
   }
 
@@ -69,7 +69,7 @@
   public void testOnFirst() throws Exception {
     Path libJar =
         testForR8(parameters.getBackend())
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
             .addKeepAllClassesRule()
             .addKeepAllAttributes()
@@ -122,7 +122,7 @@
   public void testOnLatest() throws Exception {
     Path libJar =
         testForR8(parameters.getBackend())
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
             .addKeepAllClassesRule()
             .addKeepAllAttributes()
@@ -147,7 +147,8 @@
         kotlinc(
                 parameters.getRuntime().asCf(),
                 new KotlinCompiler(kotlinCompilerVersion),
-                targetVersion)
+                targetVersion,
+                lambdaGeneration)
             .addClasspathFiles(libJar, stdLibJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
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 736520f..b9f2624 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
@@ -54,9 +54,9 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = libJars.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
@@ -85,7 +85,7 @@
             .addProgramFiles(
                 kotlinc.getKotlinStdlibJar(),
                 kotlinc.getKotlinAnnotationJar(),
-                libJars.getForConfiguration(kotlinc, targetVersion))
+                libJars.getForConfiguration(kotlinParameters))
             .addKeepAllClassesRuleWithAllowObfuscation()
             .addKeepRules("-keep class " + PKG_LIB + ".LibKt { *; }")
             .addKeepRules("-keep class kotlin.Metadata { *; }")
@@ -103,7 +103,7 @@
             .writeToZip();
     boolean expectingCompilationError = kotlinParameters.isOlderThan(KOTLINC_1_4_20) && !keepUnit;
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
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 4dd514b..e6e08a9 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
@@ -45,7 +45,7 @@
   public void testR8() throws Exception {
     testForR8(parameters.getBackend())
         .addProgramFiles(kotlinc.getKotlinStdlibJar())
-        .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
         .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 912504e..2e3db86 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
@@ -72,9 +72,9 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = libReferenceJars.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = libReferenceJars.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
@@ -94,7 +94,7 @@
     // running with R8, the output should be binary compatible with libReference.
     Path libJar =
         testForR8(parameters.getBackend())
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
             .addKeepRules("-keepclassmembers,allowaccessmodification class **.Lib { *; }")
             .addKeepRules("-keep,allowaccessmodification,allowobfuscation class **.Lib { *; }")
@@ -116,7 +116,7 @@
             .inspect(this::inspect)
             .writeToZip();
     ProcessResult mainResult =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
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 218da15..3b75b85 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
@@ -81,9 +81,9 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = libJars.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
@@ -101,8 +101,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addProgramFiles(
-                libJars.getForConfiguration(kotlinc, targetVersion),
-                kotlinc.getKotlinAnnotationJar())
+                libJars.getForConfiguration(kotlinParameters), kotlinc.getKotlinAnnotationJar())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar())
             /// Keep the annotations
             .addKeepClassAndMembersRules(PKG_LIB + ".AnnoWithClassAndEnum")
@@ -132,7 +131,7 @@
             .inspect(this::inspect)
             .writeToZip();
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
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 9ab42de..ce8cd93 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
@@ -48,10 +48,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = libJars.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/anonymous_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -68,7 +68,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             .addKeepAllClassesRuleWithAllowObfuscation()
             .addKeepRules("-keep class " + PKG + ".anonymous_lib.Test$A { *; }")
             .addKeepRules("-keep class " + PKG + ".anonymous_lib.Test { *; }")
@@ -81,7 +81,7 @@
             .inspect(this::inspect)
             .writeToZip();
     Path main =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/anonymous_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
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 2ad78ea..30e2420 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
@@ -40,9 +40,9 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = libJars.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/box_primitives_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -56,9 +56,9 @@
 
   @Test
   public void smokeTestReflection() throws Exception {
-    Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = libJars.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/box_primitives_app", "main_reflect"))
             .setOutputPath(temp.newFolder().toPath())
@@ -76,7 +76,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             .addKeepAllClassesRule()
             .addKeepAttributes(
                 ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS,
@@ -90,10 +90,10 @@
                 inspector ->
                     assertEqualDeserializedMetadata(
                         inspector,
-                        new CodeInspector(libJars.getForConfiguration(kotlinc, targetVersion))))
+                        new CodeInspector(libJars.getForConfiguration(kotlinParameters))))
             .writeToZip();
     Path main =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/box_primitives_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -110,7 +110,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             .addKeepAllClassesRule()
             .addKeepAttributes(
                 ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS,
@@ -120,7 +120,7 @@
             .compile()
             .writeToZip();
     Path main =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/box_primitives_app", "main_reflect"))
             .setOutputPath(temp.newFolder().toPath())
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteContextReceiverTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteContextReceiverTest.java
index b3254b9..4f29a8e 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteContextReceiverTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteContextReceiverTest.java
@@ -76,8 +76,8 @@
   @Test
   public void smokeTest() throws Exception {
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
-            .addClasspathFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
+            .addClasspathFiles(libJars.getForConfiguration(kotlinParameters))
             .addSourceFilesWithNonKtExtension(temp, MAIN_FILE)
             .setOutputPath(temp.newFolder().toPath())
             .enableExperimentalContextReceivers()
@@ -86,7 +86,7 @@
         .addRunClasspathFiles(
             kotlinc.getKotlinStdlibJar(),
             kotlinc.getKotlinReflectJar(),
-            libJars.getForConfiguration(kotlinc, targetVersion))
+            libJars.getForConfiguration(kotlinParameters))
         .addClasspath(output)
         .run(parameters.getRuntime(), MAIN)
         .assertSuccessWithOutput(EXPECTED);
@@ -98,7 +98,7 @@
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinAnnotationJar())
             .addProgramFiles(
-                libJars.getForConfiguration(kotlinc, targetVersion), kotlinc.getKotlinStdlibJar())
+                libJars.getForConfiguration(kotlinParameters), kotlinc.getKotlinStdlibJar())
             .addKeepClassAndMembersRules(PKG_LIB + ".*")
             .addKeepAttributes(
                 ProguardKeepAttributes.SIGNATURE,
@@ -115,10 +115,10 @@
                 inspector ->
                     assertEqualDeserializedMetadata(
                         inspector,
-                        new CodeInspector(libJars.getForConfiguration(kotlinc, targetVersion))))
+                        new CodeInspector(libJars.getForConfiguration(kotlinParameters))))
             .writeToZip();
     Path main =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFilesWithNonKtExtension(temp, MAIN_FILE)
             .setOutputPath(temp.newFolder().toPath())
@@ -136,7 +136,7 @@
     R8TestCompileResult r8LibraryResult =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             // Ensure that we do not rename members
             .addKeepRules("-keepclassmembers class * { *; }")
             // Keep the Foo class but rename it.
@@ -177,7 +177,7 @@
 
     Path libJar = r8LibraryResult.writeToZip();
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(newSource)
             .setOutputPath(temp.newFolder().toPath())
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 5cb9619..e688f66 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
@@ -41,9 +41,9 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = libJars.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
@@ -60,14 +60,14 @@
   public void testMetadataForLib() throws Exception {
     Path libJar =
         testForR8(parameters.getBackend())
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
             .addKeepAllClassesRule()
             .addKeepAllAttributes()
             .compile()
             .writeToZip();
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineBlockTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineBlockTest.java
index dd071e3..18f5ae2 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineBlockTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineBlockTest.java
@@ -45,9 +45,9 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = libJars.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
@@ -64,14 +64,14 @@
   public void testMetadataForLib() throws Exception {
     Path libJar =
         testForR8Compat(parameters.getBackend())
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
             .addKeepAllClassesRule()
             .addKeepAllAttributes()
             .compile()
             .writeToZip();
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
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 242c684..2613d1f 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
@@ -41,9 +41,9 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = libJars.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion, lambdaGeneration)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
@@ -60,14 +60,14 @@
   public void testMetadataForLib() throws Exception {
     Path libJar =
         testForR8(parameters.getBackend())
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
             .addKeepAllClassesRule()
             .addKeepAllAttributes()
             .compile()
             .writeToZip();
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion, lambdaGeneration)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
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 8cfa77f..d147f58 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
@@ -66,9 +66,9 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = libJars.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion, lambdaGeneration)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
@@ -90,13 +90,13 @@
                 kotlinc.getKotlinReflectJar(),
                 kotlinc.getKotlinAnnotationJar())
             .addKeepClassAndMembersRules(PKG_LIB + ".MyDelegatedProperty")
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
             .compile()
             .inspect(this::inspectMetadata)
             .writeToZip();
     Path main =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion, lambdaGeneration)
             .addClasspathFiles(outputJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
@@ -119,11 +119,11 @@
                 kotlinc.getKotlinReflectJar(),
                 kotlinc.getKotlinAnnotationJar())
             .addKeepClassAndMembersRules(PKG_LIB + ".MyDelegatedProperty")
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             .compile()
             .writeToZip();
     ProcessResult compileResult =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion, lambdaGeneration)
             .addClasspathFiles(outputJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteEnumTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteEnumTest.java
index 2d90a08..3bc73cd 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteEnumTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteEnumTest.java
@@ -51,9 +51,9 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = jarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = jarMap.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion, lambdaGeneration)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/enum_app", "main"))
             .compile();
@@ -69,8 +69,7 @@
     R8TestCompileResult r8libResult =
         testForR8(parameters.getBackend())
             .addProgramFiles(
-                jarMap.getForConfiguration(kotlinc, targetVersion),
-                kotlinc.getKotlinAnnotationJar())
+                jarMap.getForConfiguration(kotlinParameters), kotlinc.getKotlinAnnotationJar())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar())
             .addKeepKotlinMetadata()
             .addKeepEnumsRule()
@@ -86,7 +85,7 @@
                   direction.allFields().forEach(field -> assertTrue(field.isRenamed()));
                 });
     ProcessResult kotlinCompileResult =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(r8libResult.writeToZip())
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/enum_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -101,8 +100,7 @@
     R8TestCompileResult r8libResult =
         testForR8(parameters.getBackend())
             .addProgramFiles(
-                jarMap.getForConfiguration(kotlinc, targetVersion),
-                kotlinc.getKotlinAnnotationJar())
+                jarMap.getForConfiguration(kotlinParameters), kotlinc.getKotlinAnnotationJar())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar())
             .addKeepKotlinMetadata()
             .addKeepEnumsRule()
@@ -121,8 +119,8 @@
                   Assert.assertEquals(expectedEnumNames, kmClass.getEnumEntries());
                 });
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
-            .addClasspathFiles(jarMap.getForConfiguration(kotlinc, targetVersion))
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
+            .addClasspathFiles(jarMap.getForConfiguration(kotlinParameters))
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/enum_app", "main"))
             .compile();
     Path path =
@@ -130,7 +128,7 @@
             .addClasspathFiles(
                 kotlinc.getKotlinStdlibJar(),
                 kotlinc.getKotlinReflectJar(),
-                jarMap.getForConfiguration(kotlinc, targetVersion))
+                jarMap.getForConfiguration(kotlinParameters))
             .addProgramFiles(output)
             .addKeepAllClassesRule()
             .addApplyMapping(r8libResult.getProguardMap())
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 4a7d3b8..68c3994 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
@@ -58,9 +58,9 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = libJars.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion, lambdaGeneration)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/flexible_upper_bound_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -77,7 +77,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             // 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 { *; }")
@@ -91,7 +91,7 @@
             .inspect(this::inspect)
             .writeToZip();
     Path main =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/flexible_upper_bound_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
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 36adf2f..0bc4114 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
@@ -58,16 +58,18 @@
               kotlinCompilerTool -> {
                 kotlinCompilerTool.addClasspathFiles(
                     baseLibJarMap.getForConfiguration(
-                        kotlinCompilerTool.getCompiler(), kotlinCompilerTool.getTargetVersion()));
+                        kotlinCompilerTool.getCompiler(),
+                        kotlinCompilerTool.getTargetVersion(),
+                        kotlinCompilerTool.getLambdaGeneration()));
               });
 
   @Test
   public void smokeTest() throws Exception {
-    Path baseLibJar = baseLibJarMap.getForConfiguration(kotlinc, targetVersion);
-    Path extLibJar = extLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path baseLibJar = baseLibJarMap.getForConfiguration(kotlinParameters);
+    Path extLibJar = extLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion, lambdaGeneration)
             .addClasspathFiles(baseLibJar, extLibJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/classpath_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -82,12 +84,12 @@
 
   @Test
   public void testMetadataInClasspathType_renamed() throws Exception {
-    Path baseLibJar = baseLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path baseLibJar = baseLibJarMap.getForConfiguration(kotlinParameters);
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(
                 baseLibJar, kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(extLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(extLibJarMap.getForConfiguration(kotlinParameters))
             // Keep the Extra class and its interface (which has the method).
             .addKeepRules("-keep class **.Extra")
             // Keep Super, but allow minification.
@@ -101,7 +103,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(baseLibJar, libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/classpath_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
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 ed897d2..667d223 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
@@ -64,10 +64,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = companionLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = companionLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/companion_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -85,7 +85,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(companionLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(companionLibJarMap.getForConfiguration(kotlinParameters))
             // Keep everything
             .addKeepRules("-keep class **.companion_lib.** { *; }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
@@ -99,7 +99,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/companion_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -117,7 +117,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(companionLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(companionLibJarMap.getForConfiguration(kotlinParameters))
             // 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.
@@ -144,7 +144,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/companion_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
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 9be3d81..914b5d1 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
@@ -70,10 +70,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = extLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = extLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/extension_function_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -100,7 +100,7 @@
     Path libJar =
         (full ? testForR8(parameters.getBackend()) : testForR8Compat(parameters.getBackend()))
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(extLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(extLibJarMap.getForConfiguration(kotlinParameters))
             // Keep the B class and its interface (which has the doStuff method).
             .addKeepRules("-keep class **.B")
             .addKeepRules("-keep class **.I { <methods>; }")
@@ -116,7 +116,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/extension_function_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -155,7 +155,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(extLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(extLibJarMap.getForConfiguration(kotlinParameters))
             // Keep the B class and its interface (which has the doStuff method).
             .addKeepRules("-keep class **.B")
             .addKeepRules("-keep class **.I { <methods>; }")
@@ -173,7 +173,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/extension_function_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -195,7 +195,7 @@
     R8TestCompileResult r8LibraryResult =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(extLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(extLibJarMap.getForConfiguration(kotlinParameters))
             // Keep the B class and its interface (which has the doStuff method).
             .addKeepRules("-keep class **.B")
             .addKeepRules("-keep class **.I { <methods>; }")
@@ -252,7 +252,7 @@
         });
     assertEquals(Collections.singletonList("META-INF/main.kotlin_module"), kotlinModuleFiles);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(newSource)
             .setOutputPath(temp.newFolder().toPath())
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 eb187fd..806ef35 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
@@ -60,10 +60,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = extLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = extLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/extension_property_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -90,7 +90,7 @@
     Path libJar =
         (full ? testForR8(parameters.getBackend()) : testForR8Compat(parameters.getBackend()))
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(extLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(extLibJarMap.getForConfiguration(kotlinParameters))
             // Keep the B class and its interface (which has the doStuff method).
             .addKeepRules("-keep class **.B")
             .addKeepRules("-keep class **.I { <methods>; }")
@@ -103,7 +103,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/extension_property_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -154,7 +154,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(extLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(extLibJarMap.getForConfiguration(kotlinParameters))
             // Keep the B class and its interface (which has the doStuff method).
             .addKeepRules("-keep class **.B")
             .addKeepRules("-keep class **.I { <methods>; }")
@@ -169,7 +169,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/extension_property_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
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 9a1a9de..b4b53fb 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
@@ -59,10 +59,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = funLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = funLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/function_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -89,7 +89,7 @@
     Path libJar =
         (full ? testForR8(parameters.getBackend()) : testForR8Compat(parameters.getBackend()))
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(funLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(funLibJarMap.getForConfiguration(kotlinParameters))
             // Keep the B class and its interface (which has the doStuff method).
             .addKeepRules("-keep class **.B")
             .addKeepRules("-keep class **.I { <methods>; }")
@@ -101,7 +101,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/function_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -151,7 +151,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(funLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(funLibJarMap.getForConfiguration(kotlinParameters))
             // Keep the B class and its interface (which has the doStuff method).
             .addKeepRules("-keep class **.B")
             .addKeepRules("-keep class **.I { <methods>; }")
@@ -165,7 +165,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/function_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
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 ae3a616..44d7da0 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
@@ -55,10 +55,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = defaultValueLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = defaultValueLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/default_value_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -79,7 +79,7 @@
                 getJava8RuntimeJar(),
                 kotlinc.getKotlinStdlibJar(),
                 kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(defaultValueLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(defaultValueLibJarMap.getForConfiguration(kotlinParameters))
             // Keep LibKt and applyMap function, along with applyMap$default
             .addKeepRules("-keep class **.LibKt { *** applyMap*(...); }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
@@ -91,7 +91,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/default_value_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
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 f9ef283..4a55015 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
@@ -60,10 +60,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = varargLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = varargLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/vararg_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -81,7 +81,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(varargLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(varargLibJarMap.getForConfiguration(kotlinParameters))
             // keep SomeClass#foo, since there is a method reference in the app.
             .addKeepRules("-keep class **.SomeClass { *** foo(...); }")
             // Keep LibKt, along with bar function.
@@ -95,7 +95,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/vararg_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
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 27e7927..51e0353 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
@@ -50,7 +50,9 @@
               kotlinCompilerTool -> {
                 kotlinCompilerTool.addClasspathFiles(
                     baseLibJarMap.getForConfiguration(
-                        kotlinCompilerTool.getCompiler(), kotlinCompilerTool.getTargetVersion()));
+                        kotlinCompilerTool.getCompiler(),
+                        kotlinCompilerTool.getTargetVersion(),
+                        kotlinCompilerTool.getLambdaGeneration()));
               });
   private static final KotlinCompileMemoizer appJarMap =
       getCompileMemoizer(getKotlinFileInTest(PKG_PREFIX + "/libtype_app", "main"))
@@ -58,20 +60,24 @@
               kotlinCompilerTool -> {
                 kotlinCompilerTool.addClasspathFiles(
                     baseLibJarMap.getForConfiguration(
-                        kotlinCompilerTool.getCompiler(), kotlinCompilerTool.getTargetVersion()));
+                        kotlinCompilerTool.getCompiler(),
+                        kotlinCompilerTool.getTargetVersion(),
+                        kotlinCompilerTool.getLambdaGeneration()));
                 kotlinCompilerTool.addClasspathFiles(
                     extLibJarMap.getForConfiguration(
-                        kotlinCompilerTool.getCompiler(), kotlinCompilerTool.getTargetVersion()));
+                        kotlinCompilerTool.getCompiler(),
+                        kotlinCompilerTool.getTargetVersion(),
+                        kotlinCompilerTool.getLambdaGeneration()));
               });
 
   @Test
   public void smokeTest() throws Exception {
     testForJvm(parameters)
         .addRunClasspathFiles(
-            kotlinc.getKotlinStdlibJar(), baseLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            kotlinc.getKotlinStdlibJar(), baseLibJarMap.getForConfiguration(kotlinParameters))
         .addClasspath(
-            extLibJarMap.getForConfiguration(kotlinc, targetVersion),
-            appJarMap.getForConfiguration(kotlinc, targetVersion))
+            extLibJarMap.getForConfiguration(kotlinParameters),
+            appJarMap.getForConfiguration(kotlinParameters))
         .run(parameters.getRuntime(), PKG + ".libtype_app.MainKt")
         .assertSuccessWithOutput(EXPECTED);
   }
@@ -83,8 +89,8 @@
         testForR8(parameters.getBackend())
             // Intentionally not providing baseLibJar as lib file nor classpath file.
             .addProgramFiles(
-                extLibJarMap.getForConfiguration(kotlinc, targetVersion),
-                appJarMap.getForConfiguration(kotlinc, targetVersion),
+                extLibJarMap.getForConfiguration(kotlinParameters),
+                appJarMap.getForConfiguration(kotlinParameters),
                 kotlinc.getKotlinAnnotationJar())
             // Keep Ext extension method which requires metadata to be called with Kotlin syntax
             // from other kotlin code.
@@ -106,7 +112,7 @@
 
     testForJvm(parameters)
         .addRunClasspathFiles(
-            kotlinc.getKotlinStdlibJar(), baseLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            kotlinc.getKotlinStdlibJar(), baseLibJarMap.getForConfiguration(kotlinParameters))
         .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 2ad1340..27d825d 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
@@ -65,10 +65,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = multifileLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = multifileLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/multifileclass_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -86,7 +86,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(multifileLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(multifileLibJarMap.getForConfiguration(kotlinParameters))
             // Keep UtilKt#comma*Join*(). Let R8 optimize (inline) others, such as joinOf*(String).
             .addKeepRules("-keep class **.UtilKt")
             .addKeepRules("-keepclassmembers class * { ** comma*Join*(...); }")
@@ -96,7 +96,7 @@
             .writeToZip();
 
     ProcessResult kotlinTestCompileResult =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/multifileclass_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -125,7 +125,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(multifileLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(multifileLibJarMap.getForConfiguration(kotlinParameters))
             // Keep UtilKt#comma*Join*().
             .addKeepRules("-keep class **.UtilKt")
             .addKeepRules("-keep,allowobfuscation class **.UtilKt__SignedKt")
@@ -139,7 +139,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .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 1b5ed13..dadfe1a 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
@@ -54,10 +54,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = nestedLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = nestedLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/nested_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -75,7 +75,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar())
-            .addProgramFiles(nestedLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(nestedLibJarMap.getForConfiguration(kotlinParameters))
             // Keep the Outer class and delegations.
             .addKeepRules("-keep class **.Outer { <init>(...); *** delegate*(...); }")
             // Keep Inner to check the hierarchy.
@@ -90,7 +90,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/nested_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
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 3523c74..28dc45e 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
@@ -52,10 +52,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = parameterTypeLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = parameterTypeLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/parametertype_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -73,7 +73,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(parameterTypeLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(parameterTypeLibJarMap.getForConfiguration(kotlinParameters))
             // Keep non-private members of Impl
             .addKeepRules("-keep public class **.Impl { !private *; }")
             // Keep Itf, but allow minification.
@@ -84,7 +84,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/parametertype_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
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 0517447..b1fe8a7 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
@@ -60,10 +60,10 @@
 
   @Test
   public void smokeTest_getterApp() throws Exception {
-    Path libJar = propertyTypeLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = propertyTypeLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(PKG_PREFIX + "/fragile_property_only_getter", "getter_user"))
@@ -82,7 +82,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(propertyTypeLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(propertyTypeLibJarMap.getForConfiguration(kotlinParameters))
             // Keep property getters
             .addKeepRules("-keep class **.Person { <init>(...); }")
             .addKeepRules("-keepclassmembers class **.Person { *** get*(); }")
@@ -92,7 +92,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(PKG_PREFIX + "/fragile_property_only_getter", "getter_user"))
@@ -156,10 +156,10 @@
 
   @Test
   public void smokeTest_setterApp() throws Exception {
-    Path libJar = propertyTypeLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = propertyTypeLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(PKG_PREFIX + "/fragile_property_only_setter", "setter_user"))
@@ -178,7 +178,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(propertyTypeLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(propertyTypeLibJarMap.getForConfiguration(kotlinParameters))
             // Keep property setters (and users)
             .addKeepRules("-keep class **.Person { <init>(...); }")
             .addKeepRules("-keepclassmembers class **.Person { void set*(...); }")
@@ -192,7 +192,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(PKG_PREFIX + "/fragile_property_only_setter", "setter_user"))
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 daaa710..51ba4a9 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
@@ -52,10 +52,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = propertyTypeLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = propertyTypeLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/propertytype_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -73,7 +73,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(propertyTypeLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(propertyTypeLibJarMap.getForConfiguration(kotlinParameters))
             // Keep non-private members of Impl
             .addKeepRules("-keep public class **.Impl { !private *; }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
@@ -82,7 +82,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/propertytype_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
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 1c93e08..deabfcb 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
@@ -52,17 +52,19 @@
               kotlinCompilerTool -> {
                 kotlinCompilerTool.addClasspathFiles(
                     annoJarMap.getForConfiguration(
-                        kotlinCompilerTool.getCompiler(), kotlinCompilerTool.getTargetVersion()));
+                        kotlinCompilerTool.getCompiler(),
+                        kotlinCompilerTool.getTargetVersion(),
+                        kotlinCompilerTool.getLambdaGeneration()));
               });
 
   @Test
   public void testR8_kotlinStdlibAsLib() throws Exception {
     testForR8(parameters.getBackend())
         .addLibraryFiles(
-            annoJarMap.getForConfiguration(kotlinc, targetVersion),
+            annoJarMap.getForConfiguration(kotlinParameters),
             ToolHelper.getJava8RuntimeJar(),
             kotlinc.getKotlinStdlibJar())
-        .addProgramFiles(inputJarMap.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(inputJarMap.getForConfiguration(kotlinParameters))
         .addKeepRules(OBFUSCATE_RENAMED, KEEP_KEPT)
         .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
         .compile()
@@ -73,8 +75,8 @@
   public void testR8_kotlinStdlibAsClassPath() throws Exception {
     testForR8(parameters.getBackend())
         .addClasspathFiles(
-            annoJarMap.getForConfiguration(kotlinc, targetVersion), kotlinc.getKotlinStdlibJar())
-        .addProgramFiles(inputJarMap.getForConfiguration(kotlinc, targetVersion))
+            annoJarMap.getForConfiguration(kotlinParameters), kotlinc.getKotlinStdlibJar())
+        .addProgramFiles(inputJarMap.getForConfiguration(kotlinParameters))
         .addKeepRules(OBFUSCATE_RENAMED, KEEP_KEPT)
         .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
         .compile()
@@ -85,8 +87,8 @@
   public void testR8_kotlinStdlibAsProgramFile() throws Exception {
     testForR8(parameters.getBackend())
         .addProgramFiles(
-            annoJarMap.getForConfiguration(kotlinc, targetVersion), kotlinc.getKotlinStdlibJar())
-        .addProgramFiles(inputJarMap.getForConfiguration(kotlinc, targetVersion))
+            annoJarMap.getForConfiguration(kotlinParameters), kotlinc.getKotlinStdlibJar())
+        .addProgramFiles(inputJarMap.getForConfiguration(kotlinParameters))
         .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 1d76412..c1f84ac 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
@@ -52,10 +52,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = returnTypeLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = returnTypeLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/returntype_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -73,7 +73,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(returnTypeLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(returnTypeLibJarMap.getForConfiguration(kotlinParameters))
             // Keep non-private members of Impl
             .addKeepRules("-keep public class **.Impl { !private *; }")
             // Keep Itf, but allow minification.
@@ -84,7 +84,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/returntype_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
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 3b726d3..7dac5ed 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
@@ -46,9 +46,9 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = sealedLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = sealedLibJarMap.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
@@ -66,7 +66,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(sealedLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(sealedLibJarMap.getForConfiguration(kotlinParameters))
             .addKeepAllClassesRule()
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
             .addKeepAttributes(
@@ -74,7 +74,7 @@
             .compile()
             .writeToZip();
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
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 42b5af2..c821bd2 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
@@ -55,10 +55,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = sealedLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = sealedLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/sealed_app", "valid"))
             .setOutputPath(temp.newFolder().toPath())
@@ -76,7 +76,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(sealedLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(sealedLibJarMap.getForConfiguration(kotlinParameters))
             // Keep the Expr class
             .addKeepRules("-keep class **.Expr")
             // Keep the extension function
@@ -89,7 +89,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/sealed_app", "valid"))
             .setOutputPath(temp.newFolder().toPath())
@@ -143,7 +143,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(sealedLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(sealedLibJarMap.getForConfiguration(kotlinParameters))
             // Keep the Expr class
             .addKeepRules("-keep class **.Expr")
             // Keep the extension function
@@ -154,7 +154,7 @@
             .writeToZip();
 
     ProcessResult kotlinTestCompileResult =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .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 5346ffe..e58c4e2 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
@@ -55,10 +55,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = superTypeLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = superTypeLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/supertype_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -76,7 +76,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar())
-            .addProgramFiles(superTypeLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(superTypeLibJarMap.getForConfiguration(kotlinParameters))
             // Keep non-private members except for ones in `internal` definitions.
             .addKeepRules("-keep public class !**.internal.**, * { !private *; }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
@@ -85,7 +85,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/supertype_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -124,7 +124,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar())
-            .addProgramFiles(superTypeLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(superTypeLibJarMap.getForConfiguration(kotlinParameters))
             // Keep non-private members except for ones in `internal` definitions.
             .addKeepRules("-keep public class !**.internal.**, * { !private *; }")
             // Keep `internal` definitions, but allow minification.
@@ -135,7 +135,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/supertype_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
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 a872390..625178d 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
@@ -84,10 +84,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = typeAliasLibJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = typeAliasLibJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/typealias_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -107,7 +107,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(typeAliasLibJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(typeAliasLibJarMap.getForConfiguration(kotlinParameters))
             // Keep non-private members of Impl
             .addKeepRules("-keep class **.Impl { !private *; }")
             // Keep but allow obfuscation of types.
@@ -134,7 +134,7 @@
             .writeToZip();
 
     Path appJar =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/typealias_app", "main"))
             .compile(kotlinParameters.isOlderThan(KOTLINC_1_4_20));
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 a82971c..4f89c6a 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
@@ -97,10 +97,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = jarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = jarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/typeargument_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -118,7 +118,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(jarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(jarMap.getForConfiguration(kotlinParameters))
             // Keep ClassThatWillBeObfuscated, but allow minification.
             .addKeepRules("-keep,allowobfuscation class **ClassThatWillBeObfuscated")
             .addKeepRules("-keepclassmembers class **ClassThatWillBeObfuscated { *; }")
@@ -138,7 +138,7 @@
             .inspect(this::inspect)
             .writeToZip();
     Path mainJar =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/typeargument_app", "main"))
             .compile(kotlinParameters.isOlderThan(KOTLINC_1_4_20));
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlineClassIncludeDescriptorClassesTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlineClassIncludeDescriptorClassesTest.java
index 36aa493..2ceea1d 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlineClassIncludeDescriptorClassesTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlineClassIncludeDescriptorClassesTest.java
@@ -55,9 +55,9 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = libJars.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(
@@ -76,7 +76,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
             // kotlinc will generate a method for the unboxed type on the form login-XXXXX(String).
             // We define an annotation that specify we keep the method and descriptor classes.
@@ -99,7 +99,7 @@
                 })
             .writeToZip();
     ProcessResult kotlinCompileAppResult =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlineClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlineClassTest.java
index b34f9bb..516c912 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlineClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlineClassTest.java
@@ -48,9 +48,9 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = libJars.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion, lambdaGeneration)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/inline_class_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -67,7 +67,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             .addKeepClassAndMembersRules(passwordTypeName)
             // kotlinc will generate a method for the unboxed type on the form login-XXXXX(String).
             // Ideally, this should be targeted by annotation instead.
@@ -79,10 +79,10 @@
                 inspector ->
                     assertEqualMetadata(
                         inspector,
-                        new CodeInspector(libJars.getForConfiguration(kotlinc, targetVersion))))
+                        new CodeInspector(libJars.getForConfiguration(kotlinParameters))))
             .writeToZip();
     Path main =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/inline_class_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
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 7bc7f6d..f7589d1 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
@@ -39,9 +39,9 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = libJars.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(getKotlincHostRuntime(parameters.getRuntime()), kotlinc, targetVersion)
+        kotlinc(getKotlincHostRuntime(parameters.getRuntime()), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/inline_property_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -58,7 +58,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             // Allow renaming A to ensure that we rename in the flexible upper bound type.
             .addKeepAllClassesRule()
             .addKeepAttributes(
@@ -71,10 +71,10 @@
                 inspector ->
                     assertEqualDeserializedMetadata(
                         inspector,
-                        new CodeInspector(libJars.getForConfiguration(kotlinc, targetVersion))))
+                        new CodeInspector(libJars.getForConfiguration(kotlinParameters))))
             .writeToZip();
     Path main =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/inline_property_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInnerClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInnerClassTest.java
index 30f82bf..7cc6a01 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInnerClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInnerClassTest.java
@@ -75,7 +75,7 @@
   @Test
   public void smokeTest() throws Exception {
     assumeTrue(parameters.isCfRuntime());
-    Path libJar = jarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = jarMap.getForConfiguration(kotlinParameters);
     testForRuntime(parameters)
         .addProgramFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinReflectJar(), libJar)
         .run(parameters.getRuntime(), PKG_NESTED_REFLECT + ".MainKt")
@@ -90,7 +90,7 @@
             .addClasspathFiles(kotlinc.getKotlinStdlibJar())
             .addClasspathFiles(kotlinc.getKotlinReflectJar())
             .addClasspathFiles(kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(jarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(jarMap.getForConfiguration(kotlinParameters))
             .addKeepRules("-keep public class " + PKG_NESTED_REFLECT + ".Outer$Nested { *; }")
             .addKeepRules("-keep public class " + PKG_NESTED_REFLECT + ".Outer$Inner { *; }")
             .addKeepMainRule(PKG_NESTED_REFLECT + ".MainKt")
@@ -110,7 +110,7 @@
             .addClasspathFiles(kotlinc.getKotlinStdlibJar())
             .addClasspathFiles(kotlinc.getKotlinReflectJar())
             .addClasspathFiles(kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(jarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(jarMap.getForConfiguration(kotlinParameters))
             .addKeepAttributeInnerClassesAndEnclosingMethod()
             .addKeepRules("-keep public class " + PKG_NESTED_REFLECT + ".Outer { *; }")
             .addKeepRules("-keep public class " + PKG_NESTED_REFLECT + ".Outer$Nested { *; }")
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 ea27573..75d37de 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
@@ -60,15 +60,15 @@
   @Test
   public void smokeTest() throws Exception {
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
-            .addClasspathFiles(kotlincLibJar.getForConfiguration(kotlinc, targetVersion))
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
+            .addClasspathFiles(kotlincLibJar.getForConfiguration(kotlinParameters))
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
             .setOutputPath(temp.newFolder().toPath())
             .compile();
     testForJvm(parameters)
         .addRunClasspathFiles(
-            kotlinc.getKotlinStdlibJar(), kotlincLibJar.getForConfiguration(kotlinc, targetVersion))
+            kotlinc.getKotlinStdlibJar(), kotlincLibJar.getForConfiguration(kotlinParameters))
         .addClasspath(output)
         .run(parameters.getRuntime(), PKG_APP + ".MainKt")
         .assertSuccessWithOutput(EXPECTED);
@@ -78,7 +78,7 @@
   public void smokeTestJava() throws Exception {
     testForJvm(parameters)
         .addRunClasspathFiles(
-            kotlinc.getKotlinStdlibJar(), kotlincLibJar.getForConfiguration(kotlinc, targetVersion))
+            kotlinc.getKotlinStdlibJar(), kotlincLibJar.getForConfiguration(kotlinParameters))
         .addProgramClassFileData(MainJava.dump())
         .run(parameters.getRuntime(), MainJava.class)
         .assertSuccessWithOutput(EXPECTED);
@@ -88,7 +88,7 @@
   public void testMetadata() throws Exception {
     Path libJar =
         testForR8(parameters.getBackend())
-            .addProgramFiles(kotlincLibJar.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(kotlincLibJar.getForConfiguration(kotlinParameters))
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
             .addKeepAllClassesRule()
             .addKeepAttributes(
@@ -104,7 +104,7 @@
 
   private void testKotlin(Path libJar) throws Exception {
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
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 07faab6..e65afc8 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
@@ -48,7 +48,7 @@
   @Test
   public void testProgramPath() throws Exception {
     testForR8(parameters.getBackend())
-        .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
         .addProgramFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
         .addKeepRules("-keep class " + LIB_CLASS_NAME)
         .applyIf(keepMetadata, TestShrinkerBuilder::addKeepKotlinMetadata)
@@ -62,7 +62,7 @@
   @Test
   public void testClassPathPath() throws Exception {
     testForR8(parameters.getBackend())
-        .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
         .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
         .addKeepRules("-keep class " + LIB_CLASS_NAME)
         .addKeepRuntimeVisibleAnnotations()
@@ -73,7 +73,7 @@
   @Test
   public void testLibraryPath() throws Exception {
     testForR8(parameters.getBackend())
-        .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
         .addLibraryFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
         .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
         .addKeepRules("-keep class " + LIB_CLASS_NAME)
@@ -85,7 +85,7 @@
   @Test
   public void testMissing() throws Exception {
     testForR8(parameters.getBackend())
-        .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
         .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
         .addKeepRules("-keep class " + LIB_CLASS_NAME)
         .addKeepRuntimeVisibleAnnotations()
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteLocalDelegatedPropertyTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteLocalDelegatedPropertyTest.java
index 783a971..d823993 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteLocalDelegatedPropertyTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteLocalDelegatedPropertyTest.java
@@ -51,7 +51,7 @@
   public void smokeTest() throws Exception {
     testForJvm(parameters)
         .addRunClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinReflectJar())
-        .addClasspath(jars.getForConfiguration(kotlinc, targetVersion))
+        .addClasspath(jars.getForConfiguration(kotlinParameters))
         .run(parameters.getRuntime(), PKG_APP + ".MainKt")
         .assertSuccessWithOutput(EXPECTED_MAIN);
   }
@@ -64,14 +64,14 @@
                 kotlinc.getKotlinStdlibJar(),
                 kotlinc.getKotlinReflectJar(),
                 kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(jars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(jars.getForConfiguration(kotlinParameters))
             .addKeepAllClassesRule()
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
             .compile()
             .inspect(
                 inspector ->
                     assertEqualMetadataWithStringPoolValidation(
-                        new CodeInspector(jars.getForConfiguration(kotlinc, targetVersion)),
+                        new CodeInspector(jars.getForConfiguration(kotlinParameters)),
                         inspector,
                         (addedStrings, addedNonInitStrings) -> {}))
             .writeToZip();
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 eab5c08..440c3d1 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
@@ -54,9 +54,9 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = libJars.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion, lambdaGeneration)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
@@ -73,7 +73,7 @@
   public void testMetadataForLib() throws Exception {
     Path libJar =
         testForR8(parameters.getBackend())
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
             .addKeepRules(
                 "-keep class " + PKG_LIB + ".Sub { <init>(); *** kept(); *** keptProperty; }")
@@ -86,7 +86,7 @@
             .inspect(this::checkPruned)
             .writeToZip();
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteRawTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteRawTest.java
index 9ad7bcf..b68fe17 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteRawTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteRawTest.java
@@ -66,9 +66,9 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = libJars.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = libJars.getForConfiguration(kotlinParameters);
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar, javaLibZip)
             .addSourceFiles(getKotlinFileInTest(getBinaryNameFromJavaType(PKG_APP), "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -86,7 +86,7 @@
         testForR8(parameters.getBackend())
             .addClasspathFiles(
                 kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar(), javaLibZip)
-            .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(libJars.getForConfiguration(kotlinParameters))
             .addKeepRules("-keep class " + PKG_LIB + ".ClassWithRawType { *; }")
             .addKeepAttributes(
                 ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS,
@@ -97,12 +97,12 @@
             .inspect(
                 inspector ->
                     assertEqualMetadataWithStringPoolValidation(
-                        new CodeInspector(libJars.getForConfiguration(kotlinc, targetVersion)),
+                        new CodeInspector(libJars.getForConfiguration(kotlinParameters)),
                         inspector,
                         (addedStrings, addedNonInitStrings) -> {}))
             .writeToZip();
     Path main =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar, javaLibZip)
             .addSourceFiles(getKotlinFileInTest(getBinaryNameFromJavaType(PKG_APP), "main"))
             .setOutputPath(temp.newFolder().toPath())
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteRemovedCompanionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteRemovedCompanionTest.java
index 435b129..d85d1d7 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteRemovedCompanionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteRemovedCompanionTest.java
@@ -43,10 +43,10 @@
 
   @Test
   public void smokeTest() throws Exception {
-    Path libJar = companionRemoveJarMap.getForConfiguration(kotlinc, targetVersion);
+    Path libJar = companionRemoveJarMap.getForConfiguration(kotlinParameters);
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/companion_remove_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -64,7 +64,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(companionRemoveJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(companionRemoveJarMap.getForConfiguration(kotlinParameters))
             // Keep everything
             .addKeepRules("-keep class **.companion_remove_lib.** { *; }")
             .addKeepKotlinMetadata()
@@ -74,7 +74,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/companion_remove_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -92,7 +92,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(companionRemoveJarMap.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(companionRemoveJarMap.getForConfiguration(kotlinParameters))
             // Keep the ClasWithCompanion class.
             .addKeepKotlinMetadata()
             .addKeepRules("-keep class **.ClassWithCompanion { void <init>(); void doStuff(); }")
@@ -101,7 +101,7 @@
             .writeToZip();
 
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/companion_remove_app", "main"))
             .setOutputPath(temp.newFolder().toPath())
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteUnitPrimitiveTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteUnitPrimitiveTest.java
index 1c97e71..2825c37 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteUnitPrimitiveTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteUnitPrimitiveTest.java
@@ -64,8 +64,8 @@
   @Test
   public void smokeTest() throws Exception {
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
-            .addClasspathFiles(kotlincLibJar.getForConfiguration(kotlinc, targetVersion))
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
+            .addClasspathFiles(kotlincLibJar.getForConfiguration(kotlinParameters))
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
             .setOutputPath(temp.newFolder().toPath())
@@ -74,7 +74,7 @@
         .addRunClasspathFiles(
             kotlinc.getKotlinStdlibJar(),
             kotlinc.getKotlinReflectJar(),
-            kotlincLibJar.getForConfiguration(kotlinc, targetVersion))
+            kotlincLibJar.getForConfiguration(kotlinParameters))
         .addClasspath(output)
         .run(parameters.getRuntime(), PKG_APP + ".MainKt")
         .assertSuccessWithOutput(EXPECTED);
@@ -86,8 +86,7 @@
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinAnnotationJar())
             .addProgramFiles(
-                kotlincLibJar.getForConfiguration(kotlinc, targetVersion),
-                kotlinc.getKotlinStdlibJar())
+                kotlincLibJar.getForConfiguration(kotlinParameters), kotlinc.getKotlinStdlibJar())
             .addKeepClassAndMembersRules(PKG_LIB + ".*")
             .addKeepAttributes(
                 ProguardKeepAttributes.SIGNATURE,
@@ -102,11 +101,10 @@
                 inspector ->
                     assertEqualMetadata(
                         inspector,
-                        new CodeInspector(
-                            kotlincLibJar.getForConfiguration(kotlinc, targetVersion))))
+                        new CodeInspector(kotlincLibJar.getForConfiguration(kotlinParameters))))
             .writeToZip();
     Path main =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteValueClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteValueClassTest.java
index 5a41bec..af772c4 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteValueClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteValueClassTest.java
@@ -59,15 +59,15 @@
   @Test
   public void smokeTest() throws Exception {
     Path output =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
-            .addClasspathFiles(kotlincLibJar.getForConfiguration(kotlinc, targetVersion))
+        kotlinc(parameters.getRuntime().asCf(), kotlinParameters)
+            .addClasspathFiles(kotlincLibJar.getForConfiguration(kotlinParameters))
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
             .setOutputPath(temp.newFolder().toPath())
             .compile();
     testForJvm(parameters)
         .addRunClasspathFiles(
-            kotlinc.getKotlinStdlibJar(), kotlincLibJar.getForConfiguration(kotlinc, targetVersion))
+            kotlinc.getKotlinStdlibJar(), kotlincLibJar.getForConfiguration(kotlinParameters))
         .addClasspath(output)
         .run(parameters.getRuntime(), PKG_APP + ".MainKt")
         .assertSuccessWithOutput(EXPECTED);
@@ -78,7 +78,7 @@
     Path libJar =
         testForR8(parameters.getBackend())
             .addClasspathFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
-            .addProgramFiles(kotlincLibJar.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(kotlincLibJar.getForConfiguration(kotlinParameters))
             .addKeepAllClassesRule()
             .addKeepAttributes(
                 ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS,
@@ -93,7 +93,7 @@
             .inspect(this::inspect)
             .writeToZip();
     Path main =
-        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion)
+        kotlinc(parameters.getRuntime().asCf(), kotlinc, targetVersion, lambdaGeneration)
             .addClasspathFiles(libJar)
             .addSourceFiles(
                 getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
@@ -108,7 +108,7 @@
 
   private void inspect(CodeInspector inspector) throws IOException {
     assertEqualDeserializedMetadata(
-        inspector, new CodeInspector(kotlincLibJar.getForConfiguration(kotlinc, targetVersion)));
+        inspector, new CodeInspector(kotlincLibJar.getForConfiguration(kotlinParameters)));
     ClassSubject r8Clazz = inspector.clazz(PKG_LIB + ".Name");
     assertThat(r8Clazz, isPresent());
     String actual =
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 ec2e4e6..5d679c5 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
@@ -47,7 +47,7 @@
     final String mainClassName = "lambdas_jstyle_runnable.MainKt";
     R8TestRunResult result =
         testForR8(parameters.getBackend())
-            .addProgramFiles(compiledJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFiles(compiledJars.getForConfiguration(kotlinParameters))
             .addProgramFiles(getJavaJarFile(FOLDER))
             .addProgramFiles(kotlinc.getKotlinReflectJar(), kotlinc.getKotlinAnnotationJar())
             .addOptionsModification(
diff --git a/src/test/java/com/android/tools/r8/kotlin/optimize/defaultarguments/KotlinDefaultArgumentsTest.java b/src/test/java/com/android/tools/r8/kotlin/optimize/defaultarguments/KotlinDefaultArgumentsTest.java
index 3c1d880..fbd6f73 100644
--- a/src/test/java/com/android/tools/r8/kotlin/optimize/defaultarguments/KotlinDefaultArgumentsTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/optimize/defaultarguments/KotlinDefaultArgumentsTest.java
@@ -69,7 +69,7 @@
   public void testJvm() throws ExecutionException, CompilationFailedException, IOException {
     parameters.assumeJvmTestParameters();
     testForJvm(parameters)
-        .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compilationResults.getForConfiguration(kotlinParameters))
         .addRunClasspathFiles(buildOnDexRuntime(parameters, kotlinc.getKotlinStdlibJar()))
         .run(parameters.getRuntime(), MAIN)
         .assertSuccessWithOutputLines(EXPECTED_OUTPUT);
@@ -79,7 +79,7 @@
   public void testD8() throws ExecutionException, CompilationFailedException, IOException {
     parameters.assumeDexRuntime();
     testForD8(parameters.getBackend())
-        .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compilationResults.getForConfiguration(kotlinParameters))
         .addRunClasspathFiles(buildOnDexRuntime(parameters, kotlinc.getKotlinStdlibJar()))
         .setMinApi(parameters)
         .compile()
@@ -91,7 +91,7 @@
   @Test
   public void testR8() throws ExecutionException, CompilationFailedException, IOException {
     testForR8(parameters.getBackend())
-        .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compilationResults.getForConfiguration(kotlinParameters))
         .addProgramFiles(kotlinc.getKotlinStdlibJar())
         .addProgramFiles(kotlinc.getKotlinAnnotationJar())
         .addKeepMainRule(MAIN)
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 955048d..02fe368 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
@@ -59,7 +59,7 @@
   public void testCf() throws Exception {
     parameters.assumeJvmTestParameters();
     testForJvm(parameters)
-        .addProgramFiles(compiledJars.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compiledJars.getForConfiguration(kotlinParameters))
         .addProgramFiles(kotlinc.getKotlinStdlibJar())
         .addProgramFiles(kotlinc.getKotlinReflectJar())
         .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.LATEST))
@@ -72,7 +72,7 @@
     parameters.assumeDexRuntime();
     final File output = temp.newFile("output.zip");
     testForD8(parameters.getBackend())
-        .addProgramFiles(compiledJars.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compiledJars.getForConfiguration(kotlinParameters))
         .addProgramFiles(kotlinc.getKotlinStdlibJar())
         .addProgramFiles(kotlinc.getKotlinReflectJar())
         .setProgramConsumer(new ArchiveConsumer(output.toPath(), true))
@@ -90,7 +90,7 @@
   public void testR8() throws Exception {
     final File foo = temp.newFile("foo");
     testForR8(parameters.getBackend())
-        .addProgramFiles(compiledJars.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compiledJars.getForConfiguration(kotlinParameters))
         .addProgramFiles(kotlinc.getKotlinStdlibJar())
         .addProgramFiles(kotlinc.getKotlinReflectJar())
         .addProgramFiles(kotlinc.getKotlinAnnotationJar())
diff --git a/src/test/java/com/android/tools/r8/kotlin/reflection/ReflectiveConstructionWithInlineClassTest.java b/src/test/java/com/android/tools/r8/kotlin/reflection/ReflectiveConstructionWithInlineClassTest.java
index c8d6de0..de12077 100644
--- a/src/test/java/com/android/tools/r8/kotlin/reflection/ReflectiveConstructionWithInlineClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/reflection/ReflectiveConstructionWithInlineClassTest.java
@@ -64,7 +64,7 @@
   public void testCf() throws Exception {
     parameters.assumeJvmTestParameters();
     testForJvm(parameters)
-        .addProgramFiles(compiledJars.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compiledJars.getForConfiguration(kotlinParameters))
         .addProgramFiles(kotlinc.getKotlinStdlibJar())
         .addProgramFiles(kotlinc.getKotlinReflectJar())
         .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.LATEST))
@@ -76,7 +76,7 @@
   public void testD8() throws Exception {
     parameters.assumeDexRuntime();
     testForD8()
-        .addProgramFiles(compiledJars.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compiledJars.getForConfiguration(kotlinParameters))
         .addProgramFiles(kotlinc.getKotlinStdlibJar())
         .addProgramFiles(kotlinc.getKotlinReflectJar())
         .setMinApi(parameters)
@@ -91,7 +91,7 @@
 
   private R8FullTestBuilder configureR8(R8FullTestBuilder builder) {
     return builder
-        .addProgramFiles(compiledJars.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compiledJars.getForConfiguration(kotlinParameters))
         .addProgramFiles(kotlinc.getKotlinStdlibJar())
         .addProgramFiles(kotlinc.getKotlinReflectJar())
         .addProgramFiles(kotlinc.getKotlinAnnotationJar())
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 29a072f..4c13a43 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
@@ -55,7 +55,7 @@
   @Test
   public void testRuntime() throws ExecutionException, CompilationFailedException, IOException {
     testForRuntime(parameters)
-        .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compilationResults.getForConfiguration(kotlinParameters))
         .addRunClasspathFiles(buildOnDexRuntime(parameters, kotlinc.getKotlinStdlibJar()))
         .run(parameters.getRuntime(), MAIN)
         .assertSuccessWithOutputLines(EXPECTED);
@@ -64,7 +64,7 @@
   @Test
   public void testR8() throws ExecutionException, CompilationFailedException, IOException {
     testForR8(parameters.getBackend())
-        .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compilationResults.getForConfiguration(kotlinParameters))
         .addProgramFiles(kotlinc.getKotlinStdlibJar())
         .addProgramFiles(kotlinc.getKotlinAnnotationJar())
         .setMinApi(parameters)
diff --git a/src/test/java/com/android/tools/r8/kotlin/sealed/SealedInterfaceSubClassesHorizontalMergeTest.java b/src/test/java/com/android/tools/r8/kotlin/sealed/SealedInterfaceSubClassesHorizontalMergeTest.java
index 2939a20..07e869d 100644
--- a/src/test/java/com/android/tools/r8/kotlin/sealed/SealedInterfaceSubClassesHorizontalMergeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/sealed/SealedInterfaceSubClassesHorizontalMergeTest.java
@@ -77,7 +77,7 @@
   public void testRuntime() throws ExecutionException, CompilationFailedException, IOException {
     assumeTrue(clinitNoSideEffects);
     testForRuntime(parameters)
-        .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compilationResults.getForConfiguration(kotlinParameters))
         .addRunClasspathFiles(buildOnDexRuntime(parameters, kotlinc.getKotlinStdlibJar()))
         .run(parameters.getRuntime(), MAIN)
         .assertSuccessWithOutputLines(EXPECTED);
@@ -86,7 +86,7 @@
   @Test
   public void testR8() throws ExecutionException, CompilationFailedException, IOException {
     testForR8(parameters.getBackend())
-        .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compilationResults.getForConfiguration(kotlinParameters))
         .addProgramFiles(kotlinc.getKotlinStdlibJar())
         .addProgramFiles(kotlinc.getKotlinAnnotationJar())
         .setMinApi(parameters)
diff --git a/src/test/java/com/android/tools/r8/kotlin/stringplus/StringPlusTest.java b/src/test/java/com/android/tools/r8/kotlin/stringplus/StringPlusTest.java
index 439a400..f03bccb 100644
--- a/src/test/java/com/android/tools/r8/kotlin/stringplus/StringPlusTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/stringplus/StringPlusTest.java
@@ -70,7 +70,7 @@
   @Test
   public void testRuntime() throws ExecutionException, CompilationFailedException, IOException {
     testForRuntime(parameters)
-        .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compilationResults.getForConfiguration(kotlinParameters))
         .run(parameters.getRuntime(), MAIN)
         .assertSuccessWithOutputLines(EXPECTED);
   }
@@ -78,7 +78,7 @@
   @Test
   public void testR8() throws ExecutionException, CompilationFailedException, IOException {
     testForR8(parameters.getBackend())
-        .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compilationResults.getForConfiguration(kotlinParameters))
         .addProgramFiles(kotlinc.getKotlinAnnotationJar())
         .setMinApi(parameters)
         .allowAccessModification()
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 99ee75f..6ca66f9 100644
--- a/src/test/java/com/android/tools/r8/naming/EnumMinificationKotlinTest.java
+++ b/src/test/java/com/android/tools/r8/naming/EnumMinificationKotlinTest.java
@@ -53,7 +53,7 @@
     CodeInspector inspector =
         testForR8(parameters.getBackend())
             .addProgramFiles(
-                compiledJars.getForConfiguration(kotlinc, targetVersion),
+                compiledJars.getForConfiguration(kotlinParameters),
                 kotlinc.getKotlinAnnotationJar())
             .addProgramFiles(getJavaJarFile(FOLDER))
             .addKeepMainRule(MAIN_CLASS_NAME)
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 7378a90..85a3ea6 100644
--- a/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
+++ b/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
@@ -92,7 +92,7 @@
     TestCompileResult<?, ?> result =
         testForR8(Backend.DEX)
             .addProgramFiles(
-                compiledJars.getForConfiguration(kotlinc, targetVersion),
+                compiledJars.getForConfiguration(kotlinParameters),
                 kotlinc.getKotlinAnnotationJar())
             .addProgramFiles(getJavaJarFile(FOLDER))
             .addKeepMainRule(mainClassName)
@@ -153,7 +153,7 @@
     SingleTestRunResult<?> result =
         testForR8(Backend.DEX)
             .addProgramFiles(
-                compiledJars.getForConfiguration(kotlinc, targetVersion),
+                compiledJars.getForConfiguration(kotlinParameters),
                 kotlinc.getKotlinAnnotationJar())
             .addProgramFiles(getJavaJarFile(FOLDER))
             .enableProguardTestOptions()
diff --git a/src/test/java/com/android/tools/r8/regress/b191296688/Regress191296688.java b/src/test/java/com/android/tools/r8/regress/b191296688/Regress191296688.java
index e722b01..2b4af3e 100644
--- a/src/test/java/com/android/tools/r8/regress/b191296688/Regress191296688.java
+++ b/src/test/java/com/android/tools/r8/regress/b191296688/Regress191296688.java
@@ -48,7 +48,7 @@
     String folder = DescriptorUtils.getBinaryNameFromJavaType(PKG);
     CfRuntime cfRuntime = TestRuntime.getCheckedInJdk9();
     Path ktClasses =
-        kotlinc(cfRuntime, kotlinc, targetVersion)
+        kotlinc(cfRuntime, kotlinParameters)
             .addSourceFiles(getKotlinFileInTest(folder, "B"))
             .addClasspathFiles(aLib)
             .compile();
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 f0f0519..6e7f0ca 100644
--- a/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionInSameFileRetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionInSameFileRetraceTests.java
@@ -78,7 +78,7 @@
   @Test
   public void testRuntime() throws Exception {
     testForRuntime(parameters)
-        .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compilationResults.getForConfiguration(kotlinParameters))
         .addRunClasspathFiles(buildOnDexRuntime(parameters, kotlinc.getKotlinStdlibJar()))
         .run(parameters.getRuntime(), MAIN)
         .assertFailureWithErrorThatMatches(containsString("foo"))
@@ -90,10 +90,10 @@
 
   @Test
   public void testRetraceKotlinInlineStaticFunction() throws Exception {
-    Path kotlinSources = compilationResults.getForConfiguration(kotlinc, targetVersion);
+    Path kotlinSources = compilationResults.getForConfiguration(kotlinParameters);
     CodeInspector kotlinInspector = new CodeInspector(kotlinSources);
     testForR8(parameters.getBackend())
-        .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compilationResults.getForConfiguration(kotlinParameters))
         .addProgramFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinAnnotationJar())
         .addKeepAttributes("SourceFile", "LineNumberTable")
         .setMode(CompilationMode.RELEASE)
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 d2cc308..4f20133 100644
--- a/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionRetraceTest.java
@@ -88,7 +88,7 @@
   @Test
   public void testRuntime() throws Exception {
     testForRuntime(parameters)
-        .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compilationResults.getForConfiguration(kotlinParameters))
         .addRunClasspathFiles(buildOnDexRuntime(parameters, kotlinc.getKotlinStdlibJar()))
         .run(parameters.getRuntime(), "retrace.MainKt")
         .assertFailureWithErrorThatMatches(containsString("inlineExceptionStatic"))
@@ -99,7 +99,7 @@
   public void testRetraceKotlinInlineStaticFunction() throws Exception {
     String main = "retrace.MainKt";
     String mainFileName = "Main.kt";
-    Path kotlinSources = compilationResults.getForConfiguration(kotlinc, targetVersion);
+    Path kotlinSources = compilationResults.getForConfiguration(kotlinParameters);
     CodeInspector kotlinInspector = new CodeInspector(kotlinSources);
     testForR8(parameters.getBackend())
         .addProgramFiles(
@@ -130,7 +130,7 @@
   public void testRetraceKotlinInlineInstanceFunction() throws Exception {
     String main = "retrace.MainInstanceKt";
     String mainFileName = "MainInstance.kt";
-    Path kotlinSources = compilationResults.getForConfiguration(kotlinc, targetVersion);
+    Path kotlinSources = compilationResults.getForConfiguration(kotlinParameters);
     CodeInspector kotlinInspector = new CodeInspector(kotlinSources);
     testForR8(parameters.getBackend())
         .addProgramFiles(
@@ -164,7 +164,7 @@
   public void testRetraceKotlinNestedInlineFunction() throws Exception {
     String main = "retrace.MainNestedKt";
     String mainFileName = "MainNested.kt";
-    Path kotlinSources = compilationResults.getForConfiguration(kotlinc, targetVersion);
+    Path kotlinSources = compilationResults.getForConfiguration(kotlinParameters);
     CodeInspector kotlinInspector = new CodeInspector(kotlinSources);
     testForR8(parameters.getBackend())
         .addProgramFiles(
@@ -197,7 +197,7 @@
   public void testRetraceKotlinNestedInlineFunctionOnFirstLine() throws Exception {
     String main = "retrace.MainNestedFirstLineKt";
     String mainFileName = "MainNestedFirstLine.kt";
-    Path kotlinSources = compilationResults.getForConfiguration(kotlinc, targetVersion);
+    Path kotlinSources = compilationResults.getForConfiguration(kotlinParameters);
     CodeInspector kotlinInspector = new CodeInspector(kotlinSources);
     testForR8(parameters.getBackend())
         .addProgramFiles(
diff --git a/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionConfigurationAssertionHandlerKotlinTestBase.java b/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionConfigurationAssertionHandlerKotlinTestBase.java
index dd7ed39..7fa161f 100644
--- a/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionConfigurationAssertionHandlerKotlinTestBase.java
+++ b/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionConfigurationAssertionHandlerKotlinTestBase.java
@@ -124,8 +124,8 @@
         b ->
             b.addProgramClassFileData(
                 transformedKotlinClasses(
-                    compiledForAssertions.getForConfiguration(kotlinc, targetVersion))),
-        b -> b.addProgramFiles(compiledForAssertions.getForConfiguration(kotlinc, targetVersion)));
+                    compiledForAssertions.getForConfiguration(kotlinParameters))),
+        b -> b.addProgramFiles(compiledForAssertions.getForConfiguration(kotlinParameters)));
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionConfigurationKotlinTestBase.java b/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionConfigurationKotlinTestBase.java
index b711499..ef8d1df 100644
--- a/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionConfigurationKotlinTestBase.java
+++ b/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionConfigurationKotlinTestBase.java
@@ -92,7 +92,7 @@
     if (kotlinStdlibAsLibrary) {
       testForD8()
           .addClasspathFiles(kotlinc.getKotlinStdlibJar())
-          .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinc, targetVersion))
+          .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinParameters))
           .setMinApi(parameters)
           .apply(builderConsumer)
           .addRunClasspathFiles(kotlinStdlibLibraryForRuntime())
@@ -104,7 +104,7 @@
     } else {
       testForD8()
           .addProgramFiles(kotlinc.getKotlinStdlibJar())
-          .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinc, targetVersion))
+          .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinParameters))
           .setMinApi(parameters)
           .apply(builderConsumer)
           .run(
@@ -139,7 +139,7 @@
             },
             b -> b.addProgramFiles(kotlinc.getKotlinStdlibJar()))
         .addClasspathFiles(kotlinc.getKotlinAnnotationJar())
-        .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinParameters))
         .addKeepMainRule(testClassKt)
         .addKeepClassAndMembersRules(class1, class2)
         .setMinApi(parameters)
diff --git a/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionConfigurationKotlinWithModifiedKotlinAssertionsTest.java b/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionConfigurationKotlinWithModifiedKotlinAssertionsTest.java
index 32c29d7..556af0a 100644
--- a/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionConfigurationKotlinWithModifiedKotlinAssertionsTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionConfigurationKotlinWithModifiedKotlinAssertionsTest.java
@@ -42,7 +42,7 @@
   public void testPassthroughAllAssertions() throws Exception {
     testForD8()
         .addProgramClassFileData(dumpModifiedKotlinAssertions())
-        .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinParameters))
         .setMinApi(parameters)
         .addAssertionsConfiguration(AssertionsConfiguration.Builder::passthroughAllAssertions)
         .run(
@@ -55,7 +55,7 @@
   public void testCompileTimeEnableAllAssertions() throws Exception {
     testForD8()
         .addProgramClassFileData(dumpModifiedKotlinAssertions())
-        .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinParameters))
         .setMinApi(parameters)
         .addAssertionsConfiguration(AssertionsConfiguration.Builder::compileTimeEnableAllAssertions)
         .run(
@@ -68,7 +68,7 @@
   public void testCompileTimeDisableAllAssertions() throws Exception {
     testForD8()
         .addProgramClassFileData(dumpModifiedKotlinAssertions())
-        .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinc, targetVersion))
+        .addProgramFiles(compiledForAssertions.getForConfiguration(kotlinParameters))
         .setMinApi(parameters)
         .addAssertionsConfiguration(
             AssertionsConfiguration.Builder::compileTimeDisableAllAssertions)
diff --git a/src/test/java/com/android/tools/r8/rewrite/assertions/kotlinassertionhandlerdoublecheck/AssertionConfigurationAssertionHandlerKotlinDoubleCheckTest.java b/src/test/java/com/android/tools/r8/rewrite/assertions/kotlinassertionhandlerdoublecheck/AssertionConfigurationAssertionHandlerKotlinDoubleCheckTest.java
index d0177bb..1f504da 100644
--- a/src/test/java/com/android/tools/r8/rewrite/assertions/kotlinassertionhandlerdoublecheck/AssertionConfigurationAssertionHandlerKotlinDoubleCheckTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/assertions/kotlinassertionhandlerdoublecheck/AssertionConfigurationAssertionHandlerKotlinDoubleCheckTest.java
@@ -60,7 +60,7 @@
   protected byte[] transformedKotlinClasses(Path kotlinClasses) throws IOException {
     Path compiledKotlinClasses = temp.newFolder().toPath();
     ZipUtils.unzip(
-        compiledForAssertions.getForConfiguration(kotlinc, targetVersion), compiledKotlinClasses);
+        compiledForAssertions.getForConfiguration(kotlinParameters), compiledKotlinClasses);
     String testClassPath =
         DescriptorUtils.getPackageBinaryNameFromJavaType(getTestClassName())
             + FileUtils.CLASS_EXTENSION;
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 23a3a18..004fa7c 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
@@ -83,7 +83,7 @@
     parameters.assumeJvmTestParameters();
     AndroidApp app =
         AndroidApp.builder()
-            .addProgramFile(compiledJars.getForConfiguration(kotlinc, targetVersion))
+            .addProgramFile(compiledJars.getForConfiguration(kotlinParameters))
             .addProgramFile(getJavaJarFile(FOLDER))
             .build();
     String result = runOnJava(app, MAIN_CLASS_NAME);
@@ -95,7 +95,7 @@
     CodeInspector inspector =
         testForR8Compat(parameters.getBackend())
             .addProgramFiles(
-                compiledJars.getForConfiguration(kotlinc, targetVersion),
+                compiledJars.getForConfiguration(kotlinParameters),
                 kotlinc.getKotlinAnnotationJar())
             .addProgramFiles(getJavaJarFile(FOLDER))
             .addKeepMainRule(MAIN_CLASS_NAME)
@@ -133,7 +133,7 @@
     CodeInspector inspector =
         testForR8Compat(parameters.getBackend())
             .addProgramFiles(
-                compiledJars.getForConfiguration(kotlinc, targetVersion),
+                compiledJars.getForConfiguration(kotlinParameters),
                 kotlinc.getKotlinAnnotationJar())
             .addProgramFiles(getJavaJarFile(FOLDER))
             .addKeepMainRule(MAIN_CLASS_NAME)
@@ -175,7 +175,7 @@
     CodeInspector inspector =
         testForR8Compat(parameters.getBackend())
             .addProgramFiles(
-                compiledJars.getForConfiguration(kotlinc, targetVersion),
+                compiledJars.getForConfiguration(kotlinParameters),
                 kotlinc.getKotlinAnnotationJar())
             .addProgramFiles(getJavaJarFile(FOLDER))
             .addKeepMainRule(MAIN_CLASS_NAME)
@@ -213,7 +213,7 @@
     CodeInspector inspector =
         testForR8(parameters.getBackend())
             .addProgramFiles(
-                compiledJars.getForConfiguration(kotlinc, targetVersion),
+                compiledJars.getForConfiguration(kotlinParameters),
                 kotlinc.getKotlinAnnotationJar())
             .addProgramFiles(getJavaJarFile(FOLDER))
             .addKeepMainRule(MAIN_CLASS_NAME)