Fix tests that are using examples dex input

We are removing the dx compiled artifacts, this is changing tests to
be based on the jar input exclusively

Bug: 185205222
Change-Id: Iae66c97f6c7afe7c21d3f914bc4c1aab837d9fc0
diff --git a/src/test/java/com/android/tools/r8/R8CodeCanonicalizationTest.java b/src/test/java/com/android/tools/r8/R8CodeCanonicalizationTest.java
deleted file mode 100644
index 90343b7..0000000
--- a/src/test/java/com/android/tools/r8/R8CodeCanonicalizationTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8;
-
-import com.android.tools.r8.dex.Constants;
-import com.android.tools.r8.dex.DexParser;
-import com.android.tools.r8.dex.DexSection;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class R8CodeCanonicalizationTest extends TestBase {
-
-  private static final Path SOURCE_DEX = Paths.get(
-      ToolHelper.EXAMPLES_BUILD_DIR, "invokeempty", "classes.dex");
-
-  private int readNumberOfCodes(Path file) throws IOException {
-    DexSection[] dexSections = DexParser.parseMapFrom(file);
-    for (DexSection dexSection : dexSections) {
-      if (dexSection.type == Constants.TYPE_CODE_ITEM) {
-        return dexSection.length;
-      }
-    }
-    return 0;
-  }
-
-  @Test
-  public void testNumberOfCodeItemsUnchanged() throws Exception {
-    int numberOfCodes = readNumberOfCodes(SOURCE_DEX);
-    R8Command.Builder builder = R8Command.builder()
-        .setDisableTreeShaking(true)
-        .setDisableMinification(true)
-        .addLibraryFiles(ToolHelper.getDefaultAndroidJar())
-        .setOutput(temp.getRoot().toPath(), OutputMode.DexIndexed);
-    ToolHelper.getAppBuilder(builder).addProgramFiles(SOURCE_DEX);
-    R8.run(builder.build());
-
-    int newNumberOfCodes = readNumberOfCodes(
-        Paths.get(temp.getRoot().getCanonicalPath(), "classes.dex"));
-    Assert.assertEquals("Number of codeitems does not change.", numberOfCodes, newNumberOfCodes);
-  }
-
-}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/R8InliningRegressionTests.java b/src/test/java/com/android/tools/r8/ir/optimize/R8InliningRegressionTests.java
index 63c62a5..8f1c4af 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/R8InliningRegressionTests.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/R8InliningRegressionTests.java
@@ -14,6 +14,7 @@
 import com.android.tools.r8.utils.FileUtils;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Collections;
 import org.junit.Assume;
 import org.junit.Test;
 
@@ -51,10 +52,12 @@
         .get(ToolHelper.EXAMPLES_BUILD_DIR, folder, ToolHelper.DEFAULT_DEX_FILENAME).toString();
     Path generatedDexFile = temp.getRoot().toPath().resolve("classes.jar");
     app.writeToZipForTesting(generatedDexFile, OutputMode.DexIndexed);
-    String artOutput = ToolHelper
-        .checkArtOutputIdentical(originalDexFile, generatedDexFile.toString(), mainClass,
+    String artOutput =
+        ToolHelper.runArtNoVerificationErrors(
+            Collections.singletonList(generatedDexFile.toString()),
+            mainClass,
+            null,
             ToolHelper.getDexVm());
-
     // Compare with Java.
     ToolHelper.ProcessResult javaResult = ToolHelper.runJava(jarFile, mainClass);
     if (javaResult.exitCode != 0) {
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
index 1abcddd..0bf9bc8 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
@@ -45,22 +45,11 @@
   private static final Path JAR_LIBRARY =
       Paths.get(ToolHelper.EXAMPLES_BUILD_DIR + "memberrebindinglib.jar");
 
-  private enum Frontend {
-    DEX, JAR;
-
-    @Override
-    public String toString() {
-      return this == DEX ? ".dex" : ".jar";
-    }
-  }
-
   private final String name;
-  private final Frontend kind;
+
   private final Backend backend;
-  private final Path originalDex;
   private final Path programFile;
   private final Consumer<CodeInspector> inspection;
-  private final Consumer<CodeInspector> originalInspection;
   private final int minApiLevel;
 
   @Rule
@@ -68,16 +57,9 @@
 
   public MemberRebindingTest(TestConfiguration configuration) {
     this.name = configuration.name;
-    this.kind = configuration.kind;
     this.backend = configuration.backend;
-    originalDex = configuration.getDexPath();
-    if (kind == Frontend.DEX) {
-      this.programFile = originalDex;
-    } else {
-      this.programFile = configuration.getJarPath();
-    }
+    this.programFile = configuration.getJarPath();
     this.inspection = configuration.processedInspection;
-    this.originalInspection = configuration.originalInspection;
     this.minApiLevel = configuration.getMinApiLevel();
   }
 
@@ -114,36 +96,6 @@
     return !invoke.holder().is("java.io.PrintStream");
   }
 
-  private static void inspectOriginalMain(CodeInspector inspector) {
-    MethodSubject main = inspector.clazz("memberrebinding.Memberrebinding")
-        .method(CodeInspector.MAIN);
-    Iterator<InvokeInstructionSubject> iterator =
-        main.iterateInstructions(MemberRebindingTest::coolInvokes);
-    assertTrue(iterator.next().holder().is("memberrebinding.ClassAtBottomOfChain"));
-    assertTrue(iterator.next().holder().is("memberrebinding.ClassAtBottomOfChain"));
-    assertTrue(iterator.next().holder().is("memberrebinding.ClassAtBottomOfChain"));
-    assertTrue(iterator.next().holder().is("memberrebinding.ClassAtBottomOfChain"));
-    assertTrue(iterator.next().holder().is("memberrebinding.ClassExtendsLibraryClass"));
-    assertTrue(iterator.next().holder().is("memberrebinding.ClassExtendsLibraryClass"));
-    assertTrue(iterator.next().holder().is("memberrebinding.ClassExtendsLibraryClass"));
-    assertTrue(iterator.next().holder().is("memberrebinding.ClassExtendsLibraryClass"));
-    assertTrue(iterator.next().holder().is("memberrebinding.ClassExtendsLibraryClass"));
-    assertTrue(iterator.next().holder().is("memberrebinding.subpackage.PublicClass"));
-    assertTrue(iterator.next().holder().is("memberrebinding.subpackage.PublicClass"));
-    assertTrue(iterator.next().holder().is("memberrebinding.ClassExtendsOtherLibraryClass"));
-    assertTrue(iterator.next().holder().is("memberrebinding.ClassExtendsOtherLibraryClass"));
-    assertTrue(iterator.next().holder().is("memberrebinding.ClassExtendsOtherLibraryClass"));
-    assertTrue(iterator.next().holder().is("memberrebinding.ClassExtendsOtherLibraryClass"));
-    assertTrue(iterator.next().holder().is("java.lang.System"));
-    assertTrue(iterator.next().holder().is("memberrebindinglib.AnIndependentInterface"));
-    assertTrue(iterator.next().holder().is("java.lang.System"));
-    assertTrue(
-        iterator.next().holder().is("memberrebinding.SuperClassOfClassExtendsOtherLibraryClass"));
-    assertTrue(
-        iterator.next().holder().is("memberrebinding.SuperClassOfClassExtendsOtherLibraryClass"));
-    assertFalse(iterator.hasNext());
-  }
-
   private static void inspectMain(CodeInspector inspector) {
     MethodSubject main = inspector.clazz("memberrebinding.Memberrebinding")
         .method(CodeInspector.MAIN);
@@ -178,22 +130,6 @@
     assertFalse(iterator.hasNext());
   }
 
-  private static void inspectOriginalMain2(CodeInspector inspector) {
-    MethodSubject main = inspector.clazz("memberrebinding2.Memberrebinding")
-        .method(CodeInspector.MAIN);
-    Iterator<FieldAccessInstructionSubject> iterator =
-        main.iterateInstructions(InstructionSubject::isFieldAccess);
-    // Run through instance put, static put, instance get and instance get.
-    for (int i = 0; i < 4; i++) {
-      assertTrue(iterator.next().holder().is("memberrebinding2.ClassAtBottomOfChain"));
-      assertTrue(iterator.next().holder().is("memberrebinding2.ClassAtBottomOfChain"));
-      assertTrue(iterator.next().holder().is("memberrebinding2.ClassAtBottomOfChain"));
-      assertTrue(iterator.next().holder().is("memberrebinding2.subpackage.PublicClass"));
-    }
-    assertTrue(iterator.next().holder().is("java.lang.System"));
-    assertFalse(iterator.hasNext());
-  }
-
   private static void inspectMain2(CodeInspector inspector) {
     MethodSubject main = inspector.clazz("memberrebinding2.Memberrebinding")
         .method(CodeInspector.MAIN);
@@ -213,15 +149,6 @@
   public static MethodSignature TEST =
       new MethodSignature("test", "void", new String[]{});
 
-  private static void inspectOriginal3(CodeInspector inspector) {
-    MethodSubject main = inspector.clazz("memberrebinding3.Memberrebinding").method(TEST);
-    Iterator<InvokeInstructionSubject> iterator =
-        main.iterateInstructions(InstructionSubject::isInvoke);
-    assertTrue(iterator.next().holder().is("memberrebinding3.ClassAtBottomOfChain"));
-    assertTrue(iterator.next().holder().is("memberrebinding3.ClassAtBottomOfChain"));
-    assertTrue(iterator.next().holder().is("memberrebinding3.ClassAtBottomOfChain"));
-    assertFalse(iterator.hasNext());
-  }
 
   private static void inspect3(CodeInspector inspector) {
     MethodSubject main = inspector.clazz("memberrebinding3.Memberrebinding").method(TEST);
@@ -233,15 +160,6 @@
     assertFalse(iterator.hasNext());
   }
 
-  private static void inspectOriginal4(CodeInspector inspector) {
-    MethodSubject main = inspector.clazz("memberrebinding4.Memberrebinding").method(TEST);
-    Iterator<InvokeInstructionSubject> iterator =
-        main.iterateInstructions(InstructionSubject::isInvoke);
-    assertTrue(iterator.next().holder().is("memberrebinding4.Memberrebinding$Inner"));
-    assertTrue(iterator.next().holder().is("memberrebinding4.subpackage.PublicInterface"));
-    assertFalse(iterator.hasNext());
-  }
-
   private static void inspect4(CodeInspector inspector) {
     MethodSubject main = inspector.clazz("memberrebinding4.Memberrebinding").method(TEST);
     Iterator<InvokeInstructionSubject> iterator =
@@ -259,24 +177,18 @@
     }
 
     final String name;
-    final Frontend kind;
     final Backend backend;
     final AndroidVersion version;
-    final Consumer<CodeInspector> originalInspection;
     final Consumer<CodeInspector> processedInspection;
 
     private TestConfiguration(
         String name,
-        Frontend kind,
         Backend backend,
         AndroidVersion version,
-        Consumer<CodeInspector> originalInspection,
         Consumer<CodeInspector> processedInspection) {
       this.name = name;
-      this.kind = kind;
       this.backend = backend;
       this.version = version;
-      this.originalInspection = originalInspection;
       this.processedInspection = processedInspection;
     }
 
@@ -285,16 +197,8 @@
         String name,
         Backend backend,
         AndroidVersion version,
-        Consumer<CodeInspector> originalInspection,
         Consumer<CodeInspector> processedInspection) {
-      if (version == AndroidVersion.PRE_N && backend == Backend.DEX) {
-        builder.add(
-            new TestConfiguration(
-                name, Frontend.DEX, backend, version, originalInspection, processedInspection));
-      }
-      builder.add(
-          new TestConfiguration(
-              name, Frontend.JAR, backend, version, originalInspection, processedInspection));
+      builder.add(new TestConfiguration(name, backend, version, processedInspection));
     }
 
     public Path getDexPath() {
@@ -328,7 +232,7 @@
     }
 
     public String toString() {
-      return backend + " " + name + " " + kind;
+      return backend + " " + name;
     }
   }
 
@@ -341,28 +245,24 @@
           "memberrebinding",
           backend,
           TestConfiguration.AndroidVersion.PRE_N,
-          MemberRebindingTest::inspectOriginalMain,
           MemberRebindingTest::inspectMain);
       TestConfiguration.add(
           builder,
           "memberrebinding2",
           backend,
           TestConfiguration.AndroidVersion.PRE_N,
-          MemberRebindingTest::inspectOriginalMain2,
           MemberRebindingTest::inspectMain2);
       TestConfiguration.add(
           builder,
           "memberrebinding3",
           backend,
           TestConfiguration.AndroidVersion.PRE_N,
-          MemberRebindingTest::inspectOriginal3,
           MemberRebindingTest::inspect3);
       TestConfiguration.add(
           builder,
           "memberrebinding4",
           backend,
           TestConfiguration.AndroidVersion.N,
-          MemberRebindingTest::inspectOriginal4,
           MemberRebindingTest::inspect4);
     }
     return builder.build();
@@ -384,15 +284,8 @@
               .collect(Collectors.toList());
     }
 
-    if (kind == Frontend.DEX) {
-      CodeInspector inspector = new CodeInspector(originalDex);
-      originalInspection.accept(inspector);
-    }
-
     CodeInspector inspector = new CodeInspector(processed);
     inspection.accept(inspector);
 
-    // We don't run Art, as the test R8RunExamplesTest already does that.
-    // ToolHelper.checkArtOutputIdentical(originalDex, processed, mainClass, null);
   }
 }
diff --git a/src/test/java/com/android/tools/r8/naming/NamingTestBase.java b/src/test/java/com/android/tools/r8/naming/NamingTestBase.java
index 087e5d2..cda3c7d 100644
--- a/src/test/java/com/android/tools/r8/naming/NamingTestBase.java
+++ b/src/test/java/com/android/tools/r8/naming/NamingTestBase.java
@@ -37,7 +37,7 @@
 
   protected NamingTestBase(
       String test, List<String> keepRulesFiles, BiConsumer<DexItemFactory, NamingLens> inspection) {
-    appFileName = ToolHelper.EXAMPLES_BUILD_DIR + test + "/classes.dex";
+    appFileName = ToolHelper.EXAMPLES_BUILD_DIR + test + ".jar";
     this.keepRulesFiles = keepRulesFiles;
     this.inspection = lens -> inspection.accept(dexItemFactory, lens);
   }
diff --git a/src/test/java/com/android/tools/r8/shaking/R8Shaking2LookupTest.java b/src/test/java/com/android/tools/r8/shaking/R8Shaking2LookupTest.java
index 63e5bc9..ef19e65 100644
--- a/src/test/java/com/android/tools/r8/shaking/R8Shaking2LookupTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/R8Shaking2LookupTest.java
@@ -22,7 +22,6 @@
 
 public class R8Shaking2LookupTest {
 
-  static final String APP_FILE_NAME = ToolHelper.EXAMPLES_BUILD_DIR + "shaking2/classes.dex";
   private DirectMappedDexApplication program;
   private DexItemFactory dexItemFactory;
   private AppInfoWithClassHierarchy appInfo;
@@ -30,7 +29,9 @@
 
   @Before
   public void readApp() throws IOException, ExecutionException {
-    program = ToolHelper.buildApplication(ImmutableList.of(APP_FILE_NAME));
+    program =
+        ToolHelper.buildApplication(
+            ImmutableList.of(ToolHelper.EXAMPLES_BUILD_DIR + "shaking2.jar"));
     dexItemFactory = program.dexItemFactory;
     AppView<AppInfoWithClassHierarchy> appView = AppView.createForR8(program);
     appInfo = appView.appInfo();
diff --git a/src/test/java/com/android/tools/r8/shaking/TreeShakingSpecificTest.java b/src/test/java/com/android/tools/r8/shaking/TreeShakingSpecificTest.java
index 0bc240e..223140b 100644
--- a/src/test/java/com/android/tools/r8/shaking/TreeShakingSpecificTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/TreeShakingSpecificTest.java
@@ -60,10 +60,7 @@
     // Generate R8 processed version without library option.
     String test = "shaking2";
     testForR8(backend)
-        .applyIf(
-            backend.isCf(),
-            builder -> builder.addProgramFiles(getProgramFiles(test)),
-            builder -> builder.addProgramDexFileData(getProgramDexFileData(test)))
+        .addProgramFiles(getProgramFiles(test))
         .addKeepRuleFiles(Paths.get(EXAMPLES_DIR, test, "keep-rules.txt"))
         .addIgnoreWarnings()
         .setMinApi(minApi)
@@ -75,10 +72,7 @@
     // Generate R8 processed version without library option.
     String test = "shaking2";
     testForR8(backend)
-        .applyIf(
-            backend.isCf(),
-            builder -> builder.addProgramFiles(getProgramFiles(test)),
-            builder -> builder.addProgramDexFileData(getProgramDexFileData(test)))
+        .addProgramFiles(getProgramFiles(test))
         .addLibraryFiles()
         .addKeepRuleFiles(Paths.get(EXAMPLES_DIR, test, "keep-rules.txt"))
         .allowDiagnosticErrorMessages()
@@ -107,10 +101,7 @@
     // Generate R8 processed version without library option.
     String test = "shaking1";
     testForR8(backend)
-        .applyIf(
-            backend.isCf(),
-            builder -> builder.addProgramFiles(getProgramFiles(test)),
-            builder -> builder.addProgramDexFileData(getProgramDexFileData(test)))
+        .addProgramFiles(getProgramFiles(test))
         .addKeepRuleFiles(Paths.get(EXAMPLES_DIR, test, "keep-rules.txt"))
         .addOptionsModification(options -> options.inlinerOptions().enableInlining = false)
         .setMinApi(minApi)
diff --git a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
index bbc5b5b..b390f85 100644
--- a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
@@ -3,8 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.shaking;
 
-import static org.junit.Assume.assumeFalse;
-
 import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.R8TestCompileResult;
 import com.android.tools.r8.TestBase;
@@ -25,7 +23,6 @@
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.FoundFieldSubject;
 import com.android.tools.r8.utils.codeinspector.FoundMethodSubject;
-import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Arrays;
@@ -48,36 +45,22 @@
  */
 public abstract class TreeShakingTest extends TestBase {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> defaultTreeShakingParameters() {
-    return data(Frontend.values(), MinifyMode.values());
+    return data(MinifyMode.values());
   }
 
   public static List<Object[]> data(MinifyMode[] minifyModes) {
-    return data(Frontend.values(), minifyModes);
-  }
-
-  public static List<Object[]> data(Frontend[] frontends, MinifyMode[] minifyModes) {
-    return buildParameters(
-        frontends, getTestParameters().withAllRuntimesAndApiLevels().build(), minifyModes);
+    return buildParameters(getTestParameters().withAllRuntimesAndApiLevels().build(), minifyModes);
   }
 
   protected abstract String getName();
 
   protected abstract String getMainClass();
 
-  protected enum Frontend {
-    DEX, JAR
-  }
-
-  private final Frontend frontend;
   private final TestParameters parameters;
   private final MinifyMode minify;
 
-  public Frontend getFrontend() {
-    return frontend;
-  }
-
   public TestParameters getParameters() {
     return parameters;
   }
@@ -86,8 +69,7 @@
     return minify;
   }
 
-  public TreeShakingTest(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    this.frontend = frontend;
+  public TreeShakingTest(TestParameters parameters, MinifyMode minify) {
     this.parameters = parameters;
     this.minify = minify;
   }
@@ -173,10 +155,9 @@
       ThrowableConsumer<R8FullTestBuilder> testBuilderConsumer,
       DiagnosticsConsumer diagnosticsConsumer)
       throws Exception {
-    assumeFalse(frontend == Frontend.DEX && parameters.isCfRuntime());
-    String originalDex = ToolHelper.TESTS_BUILD_DIR + getName() + "/classes.dex";
-    String programFile =
-        frontend == Frontend.DEX ? originalDex : ToolHelper.TESTS_BUILD_DIR + getName() + ".jar";
+
+    String programFile = ToolHelper.TESTS_BUILD_DIR + getName() + ".jar";
+
     R8FullTestBuilder testBuilder =
         testForR8(parameters.getBackend())
             // Go through app builder to add dex files.
@@ -226,36 +207,43 @@
     if (!ToolHelper.artSupported() && !ToolHelper.compareAgaintsGoldenFiles()) {
       return;
     }
-    Consumer<ArtCommandBuilder> extraArtArgs = builder -> {
-      builder.appendClasspath(ToolHelper.EXAMPLES_BUILD_DIR + "shakinglib/classes.dex");
-    };
+    Path shakingLib =
+        testForD8(Backend.DEX)
+            .addProgramFiles(Paths.get(ToolHelper.EXAMPLES_BUILD_DIR + "shakinglib.jar"))
+            .setMinApi(parameters)
+            .compile()
+            .writeToZip();
+    Consumer<ArtCommandBuilder> extraArtArgs =
+        builder -> {
+          builder.appendClasspath(shakingLib.toString());
+        };
+    String d8Output =
+        testForD8(Backend.DEX)
+            .setMinApi(parameters)
+            .addProgramFiles(Paths.get(programFile))
+            .compile()
+            .writeToZip()
+            .toString();
     DexVm dexVm = parameters.getRuntime().asDex().getVm();
-    if (Files.exists(Paths.get(originalDex))) {
-      if (outputComparator != null) {
-        String output1 =
-            ToolHelper.runArtNoVerificationErrors(
-                Collections.singletonList(originalDex), getMainClass(), extraArtArgs, dexVm);
-        String output2 =
-            ToolHelper.runArtNoVerificationErrors(
-                Collections.singletonList(outJar.toString()), getMainClass(), extraArtArgs, dexVm);
-        outputComparator.accept(output1, output2);
-      } else {
-        ToolHelper.checkArtOutputIdentical(
-            Collections.singletonList(originalDex),
-            Collections.singletonList(outJar.toString()),
-            getMainClass(),
-            extraArtArgs,
-            null);
-      }
-      if (dexComparator != null) {
-        CodeInspector ref = new CodeInspector(Paths.get(originalDex));
-        dexComparator.accept(ref, compileResult.inspector());
-      }
+    if (outputComparator != null) {
+      String output1 =
+          ToolHelper.runArtNoVerificationErrors(
+              Collections.singletonList(d8Output), getMainClass(), extraArtArgs, dexVm);
+      String output2 =
+          ToolHelper.runArtNoVerificationErrors(
+              Collections.singletonList(outJar.toString()), getMainClass(), extraArtArgs, dexVm);
+      outputComparator.accept(output1, output2);
     } else {
-      Assert.assertNull(outputComparator);
-      Assert.assertNull(dexComparator);
-      ToolHelper.runArtNoVerificationErrors(
-          Collections.singletonList(outJar.toString()), getMainClass(), extraArtArgs, dexVm);
+      ToolHelper.checkArtOutputIdentical(
+          Collections.singletonList(d8Output),
+          Collections.singletonList(outJar.toString()),
+          getMainClass(),
+          extraArtArgs,
+          null);
+    }
+    if (dexComparator != null) {
+      CodeInspector ref = new CodeInspector(Paths.get(d8Output));
+      dexComparator.accept(ref, compileResult.inspector());
     }
     if (inspection != null) {
       compileResult.inspect(inspection);
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking10Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking10Test.java
index c20ebb6..a49e547 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking10Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking10Test.java
@@ -15,13 +15,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking10Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShaking10Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking10Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking11Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking11Test.java
index 47b696d..9be0804 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking11Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking11Test.java
@@ -18,13 +18,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking11Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShaking11Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking11Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking12Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking12Test.java
index 15e18bd..c59cedc 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking12Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking12Test.java
@@ -24,10 +24,9 @@
 @RunWith(Parameterized.class)
 public class TreeShaking12Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return buildParameters(
-        Frontend.values(),
         getTestParameters()
             .withAllRuntimes()
             .withApiLevelsStartingAtIncluding(AndroidApiLevel.K)
@@ -35,8 +34,8 @@
         MinifyMode.values());
   }
 
-  public TreeShaking12Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking12Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking13Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking13Test.java
index 7cf7921..4e33394 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking13Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking13Test.java
@@ -22,13 +22,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking13Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShaking13Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking13Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking14Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking14Test.java
index 36b3b37..4733d3c 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking14Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking14Test.java
@@ -18,13 +18,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking14Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShaking14Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking14Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking15Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking15Test.java
index 34da969..dcf64e5 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking15Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking15Test.java
@@ -23,13 +23,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking15Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return data(MinifyMode.withoutNone());
   }
 
-  public TreeShaking15Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking15Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking16Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking16Test.java
index 785e505..6d0136b 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking16Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking16Test.java
@@ -15,13 +15,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking16Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return data(MinifyMode.withoutNone());
   }
 
-  public TreeShaking16Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking16Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking17Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking17Test.java
index e2b7095..aa8ed3d 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking17Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking17Test.java
@@ -19,13 +19,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking17Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShaking17Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking17Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking18Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking18Test.java
index d91a2fd..eb255b8 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking18Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking18Test.java
@@ -18,13 +18,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking18Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShaking18Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking18Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking19Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking19Test.java
index e5f45bb..5b4b206 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking19Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking19Test.java
@@ -22,13 +22,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking19Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShaking19Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking19Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking1Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking1Test.java
index ad658b9..1ef98a64 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking1Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking1Test.java
@@ -21,13 +21,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking1Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{2}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShaking1Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking1Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking2Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking2Test.java
index 74232e1..d436691 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking2Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking2Test.java
@@ -22,13 +22,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking2Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShaking2Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking2Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking3Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking3Test.java
index 38cee4e..57ef8e6 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking3Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking3Test.java
@@ -18,13 +18,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking3Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShaking3Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking3Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking4Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking4Test.java
index abf9be6..b5c6e81 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking4Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking4Test.java
@@ -15,13 +15,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking4Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShaking4Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking4Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking5Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking5Test.java
index cca8f8b..a7c07b8 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking5Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking5Test.java
@@ -18,13 +18,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking5Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShaking5Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking5Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking6Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking6Test.java
index 7a91541..360394b 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking6Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking6Test.java
@@ -19,13 +19,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking6Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShaking6Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking6Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking7Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking7Test.java
index 8a6cf36..991e93c 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking7Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking7Test.java
@@ -18,13 +18,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking7Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShaking7Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking7Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking8Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking8Test.java
index 9da3d01..0fe177f 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking8Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking8Test.java
@@ -22,13 +22,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking8Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShaking8Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking8Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking9Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking9Test.java
index ec8c6ad..0b89761 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking9Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking9Test.java
@@ -18,13 +18,13 @@
 @RunWith(Parameterized.class)
 public class TreeShaking9Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShaking9Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShaking9Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAndroidNTest.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAndroidNTest.java
index 0c65f06..b9ba7b5 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAndroidNTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAndroidNTest.java
@@ -15,13 +15,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingAndroidNTest extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
-    return data(new Frontend[] {Frontend.JAR}, MinifyMode.values());
+    return data(MinifyMode.values());
   }
 
-  public TreeShakingAndroidNTest(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingAndroidNTest(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAnnotationremovalTest.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAnnotationremovalTest.java
index 728aa09..73c2026 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAnnotationremovalTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAnnotationremovalTest.java
@@ -18,14 +18,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingAnnotationremovalTest extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingAnnotationremovalTest(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingAnnotationremovalTest(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects1Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects1Test.java
index 1aa50e1..42c3096 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects1Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects1Test.java
@@ -17,14 +17,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingAssumenosideeffects1Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingAssumenosideeffects1Test(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingAssumenosideeffects1Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects2Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects2Test.java
index a57e98f..cb141fb 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects2Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects2Test.java
@@ -19,14 +19,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingAssumenosideeffects2Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingAssumenosideeffects2Test(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingAssumenosideeffects2Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects3Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects3Test.java
index b83e0b9..ac17be8 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects3Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects3Test.java
@@ -17,14 +17,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingAssumenosideeffects3Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingAssumenosideeffects3Test(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingAssumenosideeffects3Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects4Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects4Test.java
index 56083fc..4b5a370 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects4Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects4Test.java
@@ -17,14 +17,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingAssumenosideeffects4Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "mode:{0}minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingAssumenosideeffects4Test(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingAssumenosideeffects4Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects5Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects5Test.java
index fa138dd..6fe0e05 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects5Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects5Test.java
@@ -17,14 +17,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingAssumenosideeffects5Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingAssumenosideeffects5Test(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingAssumenosideeffects5Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects6Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects6Test.java
index 172c64d..1948663 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects6Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumenosideeffects6Test.java
@@ -17,14 +17,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingAssumenosideeffects6Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingAssumenosideeffects6Test(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingAssumenosideeffects6Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues1Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues1Test.java
index 45511b7..ac1338c 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues1Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues1Test.java
@@ -17,14 +17,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingAssumevalues1Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingAssumevalues1Test(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingAssumevalues1Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues2Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues2Test.java
index 88ca339..2dd0cc6 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues2Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues2Test.java
@@ -17,14 +17,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingAssumevalues2Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingAssumevalues2Test(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingAssumevalues2Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues3Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues3Test.java
index 5237778..f80b2f8 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues3Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues3Test.java
@@ -17,14 +17,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingAssumevalues3Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingAssumevalues3Test(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingAssumevalues3Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues4Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues4Test.java
index 4790850..6b1d691 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues4Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues4Test.java
@@ -17,14 +17,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingAssumevalues4Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingAssumevalues4Test(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingAssumevalues4Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues5Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues5Test.java
index 9304ed8..8ee9a97 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues5Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues5Test.java
@@ -17,14 +17,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingAssumevalues5Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingAssumevalues5Test(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingAssumevalues5Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues6Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues6Test.java
index 59c535d..882a3e4 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues6Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues6Test.java
@@ -20,14 +20,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingAssumevalues6Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingAssumevalues6Test(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingAssumevalues6Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues7Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues7Test.java
index c6ca232..f61dbd7 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues7Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAssumevalues7Test.java
@@ -20,14 +20,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingAssumevalues7Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingAssumevalues7Test(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingAssumevalues7Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingInliningTest.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingInliningTest.java
index 08dfc6a..4ab4fc9 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingInliningTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingInliningTest.java
@@ -16,13 +16,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingInliningTest extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingInliningTest(Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingInliningTest(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingMemberrebinding2Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingMemberrebinding2Test.java
index 95a0876..358de99 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingMemberrebinding2Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingMemberrebinding2Test.java
@@ -15,14 +15,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingMemberrebinding2Test extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingMemberrebinding2Test(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingMemberrebinding2Test(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingMinificationTest.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingMinificationTest.java
index b8151d6..1873c13 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingMinificationTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingMinificationTest.java
@@ -16,14 +16,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingMinificationTest extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return defaultTreeShakingParameters();
   }
 
-  public TreeShakingMinificationTest(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingMinificationTest(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingMinifygenericTest.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingMinifygenericTest.java
index 7223763..6d424bd 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingMinifygenericTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingMinifygenericTest.java
@@ -15,14 +15,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingMinifygenericTest extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return data(MinifyMode.withoutNone());
   }
 
-  public TreeShakingMinifygenericTest(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingMinifygenericTest(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingMinifygenericwithinnerTest.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingMinifygenericwithinnerTest.java
index 968ef92..3763114a 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingMinifygenericwithinnerTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingMinifygenericwithinnerTest.java
@@ -15,14 +15,13 @@
 @RunWith(Parameterized.class)
 public class TreeShakingMinifygenericwithinnerTest extends TreeShakingTest {
 
-  @Parameters(name = "mode:{0}-{1} minify:{2}")
+  @Parameters(name = "{0} minify:{1}")
   public static List<Object[]> data() {
     return data(MinifyMode.withoutNone());
   }
 
-  public TreeShakingMinifygenericwithinnerTest(
-      Frontend frontend, TestParameters parameters, MinifyMode minify) {
-    super(frontend, parameters, minify);
+  public TreeShakingMinifygenericwithinnerTest(TestParameters parameters, MinifyMode minify) {
+    super(parameters, minify);
   }
 
   @Override