Merge "Add a test for stale method def in outliner."
diff --git a/src/main/java/com/android/tools/r8/ArchiveProgramResourceProvider.java b/src/main/java/com/android/tools/r8/ArchiveProgramResourceProvider.java
index 8cafe4d..4eead29 100644
--- a/src/main/java/com/android/tools/r8/ArchiveProgramResourceProvider.java
+++ b/src/main/java/com/android/tools/r8/ArchiveProgramResourceProvider.java
@@ -136,23 +136,4 @@
       throw new ResourceException(origin, e);
     }
   }
-
-  @Override
-  public DataResourceProvider getDataResourceProvider() {
-    return visitor -> {
-      try {
-        readArchive(
-            (entry, stream) -> {
-              String name = entry.getEntryName();
-              if (!ZipUtils.isClassFile(name) && !ZipUtils.isDexFile(name)) {
-                visitor.visit(
-                    DataEntryResource.fromBytes(
-                        ByteStreams.toByteArray(stream), entry.getEntryName(), entry));
-              }
-            });
-      } catch (IOException e) {
-        throw new ResourceException(origin, e);
-      }
-    };
-  }
 }
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidApp.java b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
index ed1b960..4dff93c 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApp.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
@@ -587,9 +587,7 @@
       } else if (isClassFile(file)) {
         addProgramResources(ProgramResource.fromFile(Kind.CF, file));
       } else if (isArchive(file)) {
-        ArchiveResourceProvider archiveResourceProvider = new ArchiveResourceProvider(
-            FilteredClassPath.unfiltered(file), ignoreDexInArchive);
-        addProgramResourceProvider(archiveResourceProvider);
+        addProgramResourceProvider(ArchiveResourceProvider.fromArchive(file, ignoreDexInArchive));
       } else {
         throw new CompilationError("Unsupported source file type", new PathOrigin(file));
       }
diff --git a/src/main/java/com/android/tools/r8/utils/ArchiveResourceProvider.java b/src/main/java/com/android/tools/r8/utils/ArchiveResourceProvider.java
index a611105..e92d0a2 100644
--- a/src/main/java/com/android/tools/r8/utils/ArchiveResourceProvider.java
+++ b/src/main/java/com/android/tools/r8/utils/ArchiveResourceProvider.java
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -36,6 +37,10 @@
   private final FilteredClassPath archive;
   private final boolean ignoreDexInArchive;
 
+  public static ArchiveResourceProvider fromArchive(Path archive, boolean ignoreDexInArchive) {
+    return new ArchiveResourceProvider(FilteredClassPath.unfiltered(archive), ignoreDexInArchive);
+  }
+
   ArchiveResourceProvider(FilteredClassPath archive, boolean ignoreDexInArchive) {
     assert isArchive(archive.getPath());
     origin = new PathOrigin(archive.getPath());
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/java/com/android/tools/r8/TestBase.java
index 95e0fd1..738f29c 100644
--- a/src/test/java/com/android/tools/r8/TestBase.java
+++ b/src/test/java/com/android/tools/r8/TestBase.java
@@ -234,19 +234,25 @@
   public static List<DataEntryResource> getDataResources(AndroidApp app) throws ResourceException {
     List<DataEntryResource> dataResources = new ArrayList<>();
     for (ProgramResourceProvider programResourceProvider : app.getProgramResourceProviders()) {
-      DataResourceProvider dataResourceProvider = programResourceProvider.getDataResourceProvider();
-      if (dataResourceProvider != null) {
-        dataResourceProvider.accept(
-            new Visitor() {
-              @Override
-              public void visit(DataDirectoryResource directory) {}
+      dataResources.addAll(getDataResources(programResourceProvider.getDataResourceProvider()));
+    }
+    return dataResources;
+  }
 
-              @Override
-              public void visit(DataEntryResource file) {
-                dataResources.add(file);
-              }
-            });
-      }
+  public static List<DataEntryResource> getDataResources(DataResourceProvider dataResourceProvider)
+      throws ResourceException {
+    List<DataEntryResource> dataResources = new ArrayList<>();
+    if (dataResourceProvider != null) {
+      dataResourceProvider.accept(
+          new Visitor() {
+            @Override
+            public void visit(DataDirectoryResource directory) {}
+
+            @Override
+            public void visit(DataEntryResource file) {
+              dataResources.add(file);
+            }
+          });
     }
     return dataResources;
   }
diff --git a/src/test/java/com/android/tools/r8/naming/AdaptResourceFileContentsTest.java b/src/test/java/com/android/tools/r8/naming/AdaptResourceFileContentsTest.java
index 92e9067..74148c7 100644
--- a/src/test/java/com/android/tools/r8/naming/AdaptResourceFileContentsTest.java
+++ b/src/test/java/com/android/tools/r8/naming/AdaptResourceFileContentsTest.java
@@ -14,6 +14,7 @@
 import com.android.tools.r8.DataDirectoryResource;
 import com.android.tools.r8.DataEntryResource;
 import com.android.tools.r8.DataResourceConsumer;
+import com.android.tools.r8.DataResourceProvider.Visitor;
 import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.R8Command;
 import com.android.tools.r8.ToolHelper;
@@ -21,16 +22,21 @@
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.shaking.forceproguardcompatibility.ProguardCompatabilityTestBase;
 import com.android.tools.r8.utils.AndroidApp;
+import com.android.tools.r8.utils.ArchiveResourceProvider;
 import com.android.tools.r8.utils.FileUtils;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.google.common.collect.ImmutableList;
 import com.google.common.io.ByteStreams;
+import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
+import java.nio.file.Path;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 import org.junit.Test;
 
@@ -169,46 +175,61 @@
 
   @Test
   public void testProguardBehavior() throws Exception {
-    AndroidApp result =
-        runProguard6Raw(
-            ImmutableList.of(
-                AdaptResourceFileContentsTestClass.class,
-                AdaptResourceFileContentsTestClass.A.class,
-                AdaptResourceFileContentsTestClass.B.class),
-            getProguardConfig(true, null),
-            null,
-            getDataResources()
-                .stream()
-                .filter(x -> !x.getName().toLowerCase().endsWith(FileUtils.CLASS_EXTENSION))
-                .collect(Collectors.toList()));
+    Path proguardedJar =
+        File.createTempFile("proguarded", FileUtils.JAR_EXTENSION, temp.getRoot()).toPath();
+    runProguard6Raw(
+        proguardedJar,
+        ImmutableList.of(
+            AdaptResourceFileContentsTestClass.class,
+            AdaptResourceFileContentsTestClass.A.class,
+            AdaptResourceFileContentsTestClass.B.class),
+        getProguardConfig(true, null),
+        null,
+        getDataResources()
+            .stream()
+            .filter(x -> !x.getName().toLowerCase().endsWith(FileUtils.CLASS_EXTENSION))
+            .collect(Collectors.toList()));
 
-    List<DataEntryResource> dataResources = getDataResources(result);
-    assertEquals(4, dataResources.size());
+    // Visit each of the resources in the jar and check that their contents are as expected.
+    Set<String> filenames = new HashSet<>();
+    ArchiveResourceProvider.fromArchive(proguardedJar, true)
+        .accept(
+            new Visitor() {
+              @Override
+              public void visit(DataDirectoryResource directory) {}
 
-    assertTrue(
-        dataResources.stream().anyMatch(x -> x.getName().endsWith("resource-all-changed.md")));
-    assertTrue(
-        dataResources.stream().anyMatch(x -> x.getName().endsWith("resource-all-changed.txt")));
-    assertTrue(
-        dataResources.stream().anyMatch(x -> x.getName().endsWith("resource-all-present.txt")));
-    assertTrue(
-        dataResources.stream().anyMatch(x -> x.getName().endsWith("resource-all-unchanged.txt")));
+              @Override
+              public void visit(DataEntryResource file) {
+                try {
+                  byte[] bytes = ByteStreams.toByteArray(file.getByteStream());
+                  List<String> lines =
+                      Arrays.asList(
+                          new String(bytes, Charset.defaultCharset())
+                              .split(System.lineSeparator()));
+                  if (file.getName().endsWith("resource-all-changed.md")) {
+                    checkAllAreChanged(lines, originalAllChangedResource);
+                  } else if (file.getName().endsWith("resource-all-changed.txt")) {
+                    checkAllAreChanged(lines, originalAllChangedResource);
+                  } else if (file.getName().endsWith("resource-all-present.txt")) {
+                    checkAllArePresent(lines, new CodeInspector(readJar(proguardedJar)));
+                  } else if (file.getName().endsWith("resource-all-unchanged.txt")) {
+                    checkAllAreUnchanged(lines, originalAllUnchangedResource);
+                  }
+                } catch (Exception e) {
+                  throw new RuntimeException(e);
+                }
 
-    for (DataEntryResource dataResource : dataResources) {
-      byte[] bytes = ByteStreams.toByteArray(dataResource.getByteStream());
-      List<String> lines =
-          Arrays.asList(new String(bytes, Charset.defaultCharset()).split(System.lineSeparator()));
+                // Record that the jar contains a resource with this name.
+                filenames.add(file.getName());
+              }
+            });
 
-      if (dataResource.getName().endsWith("resource-all-changed.md")) {
-        checkAllAreChanged(lines, originalAllChangedResource);
-      } else if (dataResource.getName().endsWith("resource-all-changed.txt")) {
-        checkAllAreChanged(lines, originalAllChangedResource);
-      } else if (dataResource.getName().endsWith("resource-all-present.txt")) {
-        checkAllArePresent(lines, new CodeInspector(result));
-      } else if (dataResource.getName().endsWith("resource-all-unchanged.txt")) {
-        checkAllAreUnchanged(lines, originalAllUnchangedResource);
-      }
-    }
+    // Check that the jar contains the four expected resources, and nothing else.
+    assertEquals(4, filenames.size());
+    assertTrue(filenames.stream().anyMatch(x -> x.endsWith("resource-all-changed.md")));
+    assertTrue(filenames.stream().anyMatch(x -> x.endsWith("resource-all-changed.txt")));
+    assertTrue(filenames.stream().anyMatch(x -> x.endsWith("resource-all-present.txt")));
+    assertTrue(filenames.stream().anyMatch(x -> x.endsWith("resource-all-unchanged.txt")));
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java b/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java
index fd38d36..3f586e6 100644
--- a/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java
+++ b/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java
@@ -57,7 +57,7 @@
         "-dontwarn java.lang.invoke.*"
     );
 
-    AndroidApp app = runShrinkerRaw(shrinker, CLASSES, config);
+    AndroidApp app = runShrinker(shrinker, CLASSES, config);
     assertEquals("123451234567\nABC\n", runOnArt(app, mainClass.getCanonicalName()));
 
     CodeInspector codeInspector =
@@ -147,7 +147,7 @@
         "-dontwarn java.lang.invoke.*"
     );
 
-    AndroidApp app = runShrinkerRaw(shrinker, CLASSES, config);
+    AndroidApp app = runShrinker(shrinker, CLASSES, config);
     assertEquals("123451234567\nABC\n", runOnArt(app, mainClass.getCanonicalName()));
 
     CodeInspector codeInspector =
@@ -244,7 +244,7 @@
       ));
     }
 
-    AndroidApp app = runShrinkerRaw(shrinker, CLASSES, config);
+    AndroidApp app = runShrinker(shrinker, CLASSES, config);
     assertEquals("123451234567\nABC\n", runOnArt(app, mainClass.getCanonicalName()));
 
     CodeInspector codeInspector =
diff --git a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatabilityTestBase.java b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatabilityTestBase.java
index ac81d89..770bdbd 100644
--- a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatabilityTestBase.java
+++ b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatabilityTestBase.java
@@ -44,44 +44,21 @@
     return shrinker == Shrinker.R8_COMPAT || shrinker == Shrinker.R8;
   }
 
-  protected AndroidApp runShrinkerRaw(
+  protected AndroidApp runShrinker(
       Shrinker mode, List<Class> programClasses, Iterable<String> proguadConfigs) throws Exception {
-    return runShrinkerRaw(
-        mode, programClasses, String.join(System.lineSeparator(), proguadConfigs));
-  }
-
-  protected AndroidApp runShrinkerRaw(
-      Shrinker mode, List<Class> programClasses, String proguardConfig) throws Exception {
-    proguardMap = File.createTempFile("proguard", ".map", temp.getRoot()).toPath();
-    switch (mode) {
-      case PROGUARD5:
-        return runProguard5Raw(programClasses, proguardConfig, proguardMap);
-      case PROGUARD6:
-        return runProguard6Raw(programClasses, proguardConfig, proguardMap);
-      case PROGUARD6_THEN_D8:
-        return runProguard6AndD8Raw(programClasses, proguardConfig, proguardMap);
-      case R8_COMPAT:
-        return runR8CompatRaw(programClasses, proguardConfig);
-      case R8:
-        return runR8Raw(programClasses, proguardConfig);
-    }
-    throw new IllegalArgumentException("Unknown shrinker: " + mode);
-  }
-
-  protected CodeInspector runShrinker(
-      Shrinker mode, List<Class> programClasses, List<String> proguadConfigs) throws Exception {
     return runShrinker(mode, programClasses, String.join(System.lineSeparator(), proguadConfigs));
   }
 
-  protected CodeInspector runShrinker(
-      Shrinker mode, List<Class> programClasses, String proguardConfig) throws Exception {
+  protected AndroidApp runShrinker(Shrinker mode, List<Class> programClasses, String proguardConfig)
+      throws Exception {
+    proguardMap = File.createTempFile("proguard", ".map", temp.getRoot()).toPath();
     switch (mode) {
       case PROGUARD5:
-        return runProguard5(programClasses, proguardConfig);
+        return runProguard5(programClasses, proguardConfig, proguardMap);
       case PROGUARD6:
-        return runProguard6(programClasses, proguardConfig);
+        return runProguard6(programClasses, proguardConfig, proguardMap);
       case PROGUARD6_THEN_D8:
-        return runProguard6AndD8(programClasses, proguardConfig);
+        return runProguard6AndD8(programClasses, proguardConfig, proguardMap);
       case R8_COMPAT:
         return runR8Compat(programClasses, proguardConfig);
       case R8:
@@ -90,12 +67,34 @@
     throw new IllegalArgumentException("Unknown shrinker: " + mode);
   }
 
-  protected AndroidApp runR8Raw(List<Class> programClasses, String proguardConfig)
-      throws Exception {
-    return runR8Raw(programClasses, proguardConfig, null);
+  protected CodeInspector inspectAfterShrinking(
+      Shrinker mode, List<Class> programClasses, List<String> proguadConfigs) throws Exception {
+    return inspectAfterShrinking(
+        mode, programClasses, String.join(System.lineSeparator(), proguadConfigs));
   }
 
-  protected AndroidApp runR8Raw(
+  protected CodeInspector inspectAfterShrinking(
+      Shrinker mode, List<Class> programClasses, String proguardConfig) throws Exception {
+    switch (mode) {
+      case PROGUARD5:
+        return inspectProguard5Result(programClasses, proguardConfig);
+      case PROGUARD6:
+        return inspectProguard6Result(programClasses, proguardConfig);
+      case PROGUARD6_THEN_D8:
+        return inspectProguard6AndD8Result(programClasses, proguardConfig);
+      case R8_COMPAT:
+        return inspectR8CompatResult(programClasses, proguardConfig);
+      case R8:
+        return inspectR8Result(programClasses, proguardConfig);
+    }
+    throw new IllegalArgumentException("Unknown shrinker: " + mode);
+  }
+
+  protected AndroidApp runR8(List<Class> programClasses, String proguardConfig) throws Exception {
+    return runR8(programClasses, proguardConfig, null);
+  }
+
+  protected AndroidApp runR8(
       List<Class> programClasses, String proguardConfig, Consumer<InternalOptions> configure)
       throws Exception {
     AndroidApp app = readClassesAndAndriodJar(programClasses);
@@ -105,12 +104,13 @@
     return ToolHelper.runR8(builder.build(), configure);
   }
 
-  protected CodeInspector runR8(List<Class> programClasses, String proguardConfig) throws Exception {
-    return new CodeInspector(runR8Raw(programClasses, proguardConfig));
+  protected CodeInspector inspectR8Result(List<Class> programClasses, String proguardConfig)
+      throws Exception {
+    return new CodeInspector(runR8(programClasses, proguardConfig));
   }
 
-  protected AndroidApp runR8CompatRaw(
-      List<Class> programClasses, String proguardConfig) throws Exception {
+  protected AndroidApp runR8Compat(List<Class> programClasses, String proguardConfig)
+      throws Exception {
     CompatProguardCommandBuilder builder = new CompatProguardCommandBuilder(true);
     ToolHelper.allowTestProguardOptions(builder);
     builder.addProguardConfiguration(ImmutableList.of(proguardConfig), Origin.unknown());
@@ -121,17 +121,12 @@
     return ToolHelper.runR8(builder.build());
   }
 
-  protected CodeInspector runR8Compat(
-      List<Class> programClasses, String proguardConfig) throws Exception {
-    return new CodeInspector(runR8CompatRaw(programClasses, proguardConfig));
-  }
-
-  protected CodeInspector runR8CompatKeepingMain(Class mainClass, List<Class> programClasses)
+  protected CodeInspector inspectR8CompatResult(List<Class> programClasses, String proguardConfig)
       throws Exception {
-    return runR8Compat(programClasses, keepMainProguardConfiguration(mainClass));
+    return new CodeInspector(runR8Compat(programClasses, proguardConfig));
   }
 
-  protected AndroidApp runProguard5Raw(
+  protected AndroidApp runProguard5(
       List<Class> programClasses, String proguardConfig, Path proguardMap) throws Exception {
     Path proguardedJar =
         File.createTempFile("proguarded", FileUtils.JAR_EXTENSION, temp.getRoot()).toPath();
@@ -149,19 +144,41 @@
     return readJar(proguardedJar);
   }
 
-  protected CodeInspector runProguard5(
-      List<Class> programClasses, String proguardConfig) throws Exception {
+  protected CodeInspector inspectProguard5Result(List<Class> programClasses, String proguardConfig)
+      throws Exception {
     proguardMap = File.createTempFile("proguard", ".map", temp.getRoot()).toPath();
     return new CodeInspector(
-        runProguard5Raw(programClasses, proguardConfig, proguardMap), proguardMap);
+        runProguard5(programClasses, proguardConfig, proguardMap), proguardMap);
   }
 
-  protected AndroidApp runProguard6Raw(
+  protected ProcessResult runProguard6Raw(
+      Path destination,
+      List<Class> programClasses,
+      String proguardConfig,
+      Path proguardMap,
+      List<DataEntryResource> dataResources)
+      throws Exception {
+    Path proguardConfigFile = File.createTempFile("proguard", ".config", temp.getRoot()).toPath();
+    FileUtils.writeTextFile(proguardConfigFile, proguardConfig);
+    ProcessResult result =
+        ToolHelper.runProguard6Raw(
+            jarTestClasses(programClasses, dataResources),
+            destination,
+            ToolHelper.getAndroidJar(AndroidApiLevel.N),
+            proguardConfigFile,
+            proguardMap);
+    if (result.exitCode != 0) {
+      fail("Proguard failed, exit code " + result.exitCode + ", stderr:\n" + result.stderr);
+    }
+    return result;
+  }
+
+  protected AndroidApp runProguard6(
       List<Class> programClasses, String proguardConfig, Path proguardMap) throws Exception {
-    return runProguard6Raw(programClasses, proguardConfig, proguardMap, null);
+    return runProguard6(programClasses, proguardConfig, proguardMap, null);
   }
 
-  protected AndroidApp runProguard6Raw(
+  protected AndroidApp runProguard6(
       List<Class> programClasses,
       String proguardConfig,
       Path proguardMap,
@@ -169,29 +186,18 @@
       throws Exception {
     Path proguardedJar =
         File.createTempFile("proguarded", FileUtils.JAR_EXTENSION, temp.getRoot()).toPath();
-    Path proguardConfigFile = File.createTempFile("proguard", ".config", temp.getRoot()).toPath();
-    FileUtils.writeTextFile(proguardConfigFile, proguardConfig);
-    ProcessResult result =
-        ToolHelper.runProguard6Raw(
-            jarTestClasses(programClasses, dataResources),
-            proguardedJar,
-            ToolHelper.getAndroidJar(AndroidApiLevel.N),
-            proguardConfigFile,
-            proguardMap);
-    if (result.exitCode != 0) {
-      fail("Proguard failed, exit code " + result.exitCode + ", stderr:\n" + result.stderr);
-    }
+    runProguard6Raw(proguardedJar, programClasses, proguardConfig, proguardMap, dataResources);
     return readJar(proguardedJar);
   }
 
-  protected CodeInspector runProguard6(
-      List<Class> programClasses, String proguardConfig) throws Exception {
+  protected CodeInspector inspectProguard6Result(List<Class> programClasses, String proguardConfig)
+      throws Exception {
     proguardMap = File.createTempFile("proguard", ".map", temp.getRoot()).toPath();
     return new CodeInspector(
-        runProguard6Raw(programClasses, proguardConfig, proguardMap), proguardMap);
+        runProguard6(programClasses, proguardConfig, proguardMap), proguardMap);
   }
 
-  protected AndroidApp runProguard6AndD8Raw(
+  protected AndroidApp runProguard6AndD8(
       List<Class> programClasses, String proguardConfig, Path proguardMap) throws Exception {
     Path proguardedJar =
         File.createTempFile("proguarded", FileUtils.JAR_EXTENSION, temp.getRoot()).toPath();
@@ -209,16 +215,11 @@
     return ToolHelper.runD8(readJar(proguardedJar));
   }
 
-  protected CodeInspector runProguard6AndD8(
+  protected CodeInspector inspectProguard6AndD8Result(
       List<Class> programClasses, String proguardConfig) throws Exception {
     proguardMap = File.createTempFile("proguard", ".map", temp.getRoot()).toPath();
     return new CodeInspector(
-        runProguard6AndD8Raw(programClasses, proguardConfig, proguardMap), proguardMap);
-  }
-
-  protected CodeInspector runProguardKeepingMain(Class mainClass, List<Class> programClasses)
-      throws Exception {
-    return runProguard6AndD8(programClasses, keepMainProguardConfiguration(mainClass));
+        runProguard6AndD8(programClasses, proguardConfig, proguardMap), proguardMap);
   }
 
   protected void verifyClassesPresent(
diff --git a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/defaultctor/ImplicitlyKeptDefaultConstructorTest.java b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/defaultctor/ImplicitlyKeptDefaultConstructorTest.java
index aed1423..1464cb1 100644
--- a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/defaultctor/ImplicitlyKeptDefaultConstructorTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/defaultctor/ImplicitlyKeptDefaultConstructorTest.java
@@ -131,13 +131,13 @@
       Class mainClass, List<Class> programClasses, String proguardConfiguration,
       TriConsumer<Class, List<Class>, CodeInspector> r8Checker,
       TriConsumer<Class, List<Class>, CodeInspector> proguardChecker) throws Exception {
-    CodeInspector inspector = runR8Compat(programClasses, proguardConfiguration);
+    CodeInspector inspector = inspectR8CompatResult(programClasses, proguardConfiguration);
     r8Checker.accept(mainClass, programClasses, inspector);
 
     if (isRunProguard()) {
-      inspector = runProguard6(programClasses, proguardConfiguration);
+      inspector = inspectProguard6Result(programClasses, proguardConfiguration);
       proguardChecker.accept(mainClass, programClasses, inspector);
-      inspector = runProguard6AndD8(programClasses, proguardConfiguration);
+      inspector = inspectProguard6AndD8Result(programClasses, proguardConfiguration);
       proguardChecker.accept(mainClass, programClasses, inspector);
     }
   }
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
index 513a01a..0f1c519 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
@@ -59,7 +59,7 @@
         "  public <methods>;",
         "}"
     );
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     ClassSubject classSubject = codeInspector.clazz(ClassForIf.class);
     assertThat(classSubject, isPresent());
     MethodSubject methodSubject = classSubject.method(publicMethod);
@@ -98,7 +98,7 @@
         "  !public <methods>;",
         "}"
     );
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     ClassSubject classSubject = codeInspector.clazz(ClassForIf.class);
     assertThat(classSubject, isPresent());
     MethodSubject methodSubject = classSubject.method(publicMethod);
@@ -138,7 +138,7 @@
         "  public <methods>;",
         "}"
     );
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     ClassSubject classSubject = codeInspector.clazz(ClassForIf.class);
     assertThat(classSubject, isPresent());
     MethodSubject methodSubject = classSubject.method(publicMethod);
@@ -170,7 +170,7 @@
         "  !public <methods>;",
         "}"
     );
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     ClassSubject classSubject = codeInspector.clazz(ClassForIf.class);
     assertThat(classSubject, isPresent());
     MethodSubject methodSubject = classSubject.method(publicMethod);
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAnnotationTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAnnotationTest.java
index 146c3cd..972b178 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAnnotationTest.java
@@ -50,7 +50,7 @@
         "-keep class **.UnusedAnnotation*"
     );
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     verifyClassesAbsent(codeInspector,
         UnusedAnnotation.class, UnusedAnnotationDependent.class);
     verifyClassesPresent(codeInspector,
@@ -76,7 +76,7 @@
         "-keep class <1>.Unused<2>*"
     );
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     verifyClassesAbsent(codeInspector,
         UnusedAnnotation.class, UnusedAnnotationDependent.class);
     verifyClassesPresent(codeInspector,
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTest.java
index 167c2f4..cbafcf0 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTest.java
@@ -60,21 +60,21 @@
   }
 
   @Override
-  protected CodeInspector runR8(
-      List<Class> programClasses, String proguardConfig) throws Exception {
-    return super.runR8(programClasses, adaptConfiguration(proguardConfig));
+  protected CodeInspector inspectR8Result(List<Class> programClasses, String proguardConfig)
+      throws Exception {
+    return super.inspectR8Result(programClasses, adaptConfiguration(proguardConfig));
   }
 
   @Override
-  protected CodeInspector runProguard5(
-      List<Class> programClasses, String proguardConfig) throws Exception {
-    return super.runProguard5(programClasses, adaptConfiguration(proguardConfig));
+  protected CodeInspector inspectProguard5Result(List<Class> programClasses, String proguardConfig)
+      throws Exception {
+    return super.inspectProguard5Result(programClasses, adaptConfiguration(proguardConfig));
   }
 
   @Override
-  protected CodeInspector runProguard6(
-      List<Class> programClasses, String proguardConfig) throws Exception {
-    return super.runProguard6(programClasses, adaptConfiguration(proguardConfig));
+  protected CodeInspector inspectProguard6Result(List<Class> programClasses, String proguardConfig)
+      throws Exception {
+    return super.inspectProguard6Result(programClasses, adaptConfiguration(proguardConfig));
   }
 
   @Test
@@ -86,7 +86,7 @@
         "-keep,allowobfuscation class **.Dependent"
     );
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     if (!keepPrecondition) {
       // TODO(b/73708139): Proguard6 kept Dependent (w/o any members), which is not necessary.
       if (shrinker == Shrinker.PROGUARD6) {
@@ -123,7 +123,7 @@
         "-keep,allowobfuscation class <1>.<2>"
     );
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     if (!keepPrecondition) {
       // TODO(b/73708139): Proguard6 kept Dependent (w/o any members), which is not necessary.
       if (shrinker == Shrinker.PROGUARD6) {
@@ -160,7 +160,7 @@
         "}"
     );
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     if (!keepPrecondition) {
       assertEquals(1, codeInspector.allClasses().size());
       return;
@@ -196,7 +196,7 @@
         "-keep,allowobfuscation class **.*User"
     );
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     if (!keepPrecondition) {
       // TODO(b/73708139): Proguard6 kept DependentUser (w/o any members), which is not necessary.
       if (shrinker == Shrinker.PROGUARD6) {
@@ -236,7 +236,7 @@
         "-keep,allowobfuscation class <1>.<2>User"
     );
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     if (!keepPrecondition) {
       // TODO(b/73708139): Proguard6 kept DependentUser (w/o any members), which is not necessary.
       if (shrinker == Shrinker.PROGUARD6) {
@@ -274,7 +274,7 @@
         "-keepnames class **.Dependent"
     );
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
 
     ClassSubject clazz = codeInspector.clazz(Dependent.class);
     // Only class name is not renamed, if triggered.
@@ -299,7 +299,7 @@
         "}"
     );
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
 
     ClassSubject clazz = codeInspector.clazz(Dependent.class);
     // Class name is not renamed, if triggered.
@@ -325,7 +325,7 @@
         "}"
     );
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
 
     ClassSubject clazz = codeInspector.clazz(Dependent.class);
     assertThat(clazz, isRenamed());
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnFieldTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnFieldTest.java
index d199cd4..688c532 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnFieldTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnFieldTest.java
@@ -42,15 +42,15 @@
   }
 
   @Override
-  protected CodeInspector runR8(
-      List<Class> programClasses, String proguardConfig) throws Exception {
-    return super.runR8(programClasses, adaptConfiguration(proguardConfig));
+  protected CodeInspector inspectR8Result(List<Class> programClasses, String proguardConfig)
+      throws Exception {
+    return super.inspectR8Result(programClasses, adaptConfiguration(proguardConfig));
   }
 
   @Override
-  protected CodeInspector runProguard6(
-      List<Class> programClasses, String proguardConfig) throws Exception {
-    return super.runProguard6(programClasses, adaptConfiguration(proguardConfig));
+  protected CodeInspector inspectProguard6Result(List<Class> programClasses, String proguardConfig)
+      throws Exception {
+    return super.inspectProguard6Result(programClasses, adaptConfiguration(proguardConfig));
   }
 
   @Test
@@ -77,7 +77,7 @@
         "-keep class **.D"
     );
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     verifyClassesAbsent(codeInspector,
         R1.class, R2.class, D.class, D2.class);
     verifyClassesPresent(codeInspector,
@@ -96,7 +96,7 @@
         "-keep class **.D<2>"
     );
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     verifyClassesAbsent(codeInspector,
         R1.class, R2.class, D.class, D2.class);
     verifyClassesPresent(codeInspector,
@@ -119,7 +119,7 @@
         "-keep class **.D2"
     );
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     verifyClassesAbsent(codeInspector,
         R.class, D.class, R1.class, D1.class);
     verifyClassesPresent(codeInspector,
@@ -138,7 +138,7 @@
         "-keep class **.D<2>"
     );
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     verifyClassesAbsent(codeInspector,
         R.class, D.class, R1.class, D1.class);
     verifyClassesPresent(codeInspector,
@@ -158,7 +158,7 @@
         "-keep class **$*D"
     );
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     verifyClassesAbsent(codeInspector,
         R.class, D.class, R1.class, D1.class, R2.class, D2.class);
     verifyClassesPresent(codeInspector,
@@ -178,7 +178,7 @@
         "-keep class <1>$<2>D"
     );
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     verifyClassesAbsent(codeInspector,
         R.class, D.class, R1.class, D1.class, R2.class, D2.class);
     verifyClassesPresent(codeInspector,
@@ -202,7 +202,7 @@
             "}",
             "-keep class **.D2");
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     verifyClassesAbsent(codeInspector, D2.class);
     verifyClassesPresent(codeInspector,
         I.class, Impl.class, D1.class);
@@ -225,7 +225,7 @@
             "}",
             "-keep class <2>.D2");
 
-    CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+    CodeInspector codeInspector = inspectAfterShrinking(shrinker, CLASSES, config);
     verifyClassesAbsent(codeInspector, D2.class);
     verifyClassesPresent(codeInspector,
         I.class, Impl.class, D1.class);
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/inlining/IfRuleWithInlining.java b/src/test/java/com/android/tools/r8/shaking/ifrule/inlining/IfRuleWithInlining.java
index 7391986..7c7571f 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/inlining/IfRuleWithInlining.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/inlining/IfRuleWithInlining.java
@@ -90,6 +90,6 @@
         "-dontobfuscate"
     );
 
-    check(runShrinkerRaw(shrinker, CLASSES, config));
+    check(runShrinker(shrinker, CLASSES, config));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/IfRuleWithVerticalClassMerging.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/IfRuleWithVerticalClassMerging.java
index cc574f3..617cb83 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/IfRuleWithVerticalClassMerging.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/IfRuleWithVerticalClassMerging.java
@@ -84,9 +84,8 @@
   }
 
   @Override
-  protected AndroidApp runR8Raw(
-      List<Class> programClasses, String proguardConfig) throws Exception {
-    return super.runR8Raw(programClasses, proguardConfig, this::configure);
+  protected AndroidApp runR8(List<Class> programClasses, String proguardConfig) throws Exception {
+    return super.runR8(programClasses, proguardConfig, this::configure);
   }
 
   private void check(AndroidApp app) throws Exception {
@@ -119,7 +118,7 @@
         "-dontobfuscate"
     );
 
-    check(runShrinkerRaw(shrinker, CLASSES, config));
+    check(runShrinker(shrinker, CLASSES, config));
   }
 
   @Test
@@ -135,7 +134,7 @@
         "-dontobfuscate"
     );
 
-    check(runShrinkerRaw(shrinker, CLASSES, config));
+    check(runShrinker(shrinker, CLASSES, config));
   }
 
   @Test
@@ -151,6 +150,6 @@
         "-dontobfuscate"
     );
 
-    check(runShrinkerRaw(shrinker, CLASSES, config));
+    check(runShrinker(shrinker, CLASSES, config));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/shaking/keepclassmembers/KeepClassMembersTest.java b/src/test/java/com/android/tools/r8/shaking/keepclassmembers/KeepClassMembersTest.java
index 97cad3c..61f4ce5 100644
--- a/src/test/java/com/android/tools/r8/shaking/keepclassmembers/KeepClassMembersTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/keepclassmembers/KeepClassMembersTest.java
@@ -77,7 +77,7 @@
     check(inspector, mainClass, staticClass, forceProguardCompatibility, false);
 
     if (isRunProguard()) {
-      inspector = runProguard6(ImmutableList.of(mainClass, staticClass), proguardConfig);
+      inspector = inspectProguard6Result(ImmutableList.of(mainClass, staticClass), proguardConfig);
       check(inspector, mainClass, staticClass, true, true);
     }
   }