Factor out running relocator into utils

Change-Id: I34cb6c9d811a22fa126574790acb1e56fdf07828
diff --git a/src/main/java/com/android/tools/r8/relocator/SimplePackagesRewritingMapper.java b/src/main/java/com/android/tools/r8/relocator/SimplePackagesRewritingMapper.java
index 7afb7e3..5dd7c9d 100644
--- a/src/main/java/com/android/tools/r8/relocator/SimplePackagesRewritingMapper.java
+++ b/src/main/java/com/android/tools/r8/relocator/SimplePackagesRewritingMapper.java
@@ -33,7 +33,6 @@
 
   public NamingLens compute(Map<PackageReference, PackageReference> mapping) {
     // Prefetch all code objects to ensure we have seen all types.
-    // TODO(b/129925954): When updated, there is no need for this prefetch.
     for (DexProgramClass clazz : appView.appInfo().classes()) {
       for (DexEncodedMethod method : clazz.methods()) {
         if (method.getCode() != null) {
diff --git a/src/test/java/com/android/tools/r8/relocator/RelocatorTest.java b/src/test/java/com/android/tools/r8/relocator/RelocatorTest.java
index e6a2f1d..237d3cb 100644
--- a/src/test/java/com/android/tools/r8/relocator/RelocatorTest.java
+++ b/src/test/java/com/android/tools/r8/relocator/RelocatorTest.java
@@ -4,10 +4,12 @@
 
 package com.android.tools.r8.relocator;
 
+import static com.android.tools.r8.relocator.RelocatorUtils.inspectAllClassesRelocated;
+import static com.android.tools.r8.relocator.RelocatorUtils.inspectAllSignaturesNotContainingString;
+import static com.android.tools.r8.relocator.RelocatorUtils.runRelocator;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static junit.framework.TestCase.assertFalse;
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThrows;
@@ -19,14 +21,11 @@
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.graph.DexClass;
-import com.android.tools.r8.references.Reference;
 import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.Pair;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
-import com.android.tools.r8.utils.codeinspector.FoundFieldSubject;
 import com.android.tools.r8.utils.codeinspector.FoundMethodSubject;
 import com.android.tools.r8.utils.codeinspector.LocalVariableTable;
 import com.android.tools.r8.utils.codeinspector.LocalVariableTable.LocalVariableTableEntry;
@@ -63,7 +62,7 @@
   @Test
   public void testRelocatorIdentity() throws Exception {
     Path output = temp.newFile("output.jar").toPath();
-    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, new HashMap<>(), output);
+    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, new HashMap<>(), output, external);
     inspectAllClassesRelocated(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, output, "", "");
   }
 
@@ -74,7 +73,7 @@
     Path output = temp.newFile("output.jar").toPath();
     Map<String, String> mapping = new HashMap<>();
     mapping.put(originalPrefix, newPrefix);
-    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output);
+    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output, external);
     // TODO(b/155618698): Extend relocator with a richer language such that java.lang.Object is not
     //   relocated.
     RuntimeException compilationError =
@@ -97,12 +96,9 @@
     Map<String, String> mapping = new HashMap<>();
     mapping.put(originalPrefix, newPrefix);
     // TODO(b/155047618): Fixup the type after rewriting.
-    CompilationFailedException compilationFailedException =
-        assertThrows(
-            CompilationFailedException.class,
-            () -> {
-              runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output);
-            });
+    assertThrows(
+        CompilationFailedException.class,
+        () -> runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output, external));
   }
 
   @Test
@@ -112,7 +108,7 @@
     Path output = temp.newFile("output.jar").toPath();
     Map<String, String> mapping = new HashMap<>();
     mapping.put(originalPrefix, newPrefix);
-    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output);
+    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output, external);
     // Assert that all classes are the same, have the same methods and debug info:
     CodeInspector originalInspector = new CodeInspector(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS);
     CodeInspector relocatedInspector = new CodeInspector(output);
@@ -157,7 +153,7 @@
     mapping.put("some.package.that.does.not.exist", "foo");
     mapping.put(originalPrefix, newPrefix);
     Path output = temp.newFile("output.jar").toPath();
-    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output);
+    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output, external);
     inspectAllClassesRelocated(
         ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, output, originalPrefix, newPrefix);
   }
@@ -173,7 +169,7 @@
     CompilationFailedException exception =
         assertThrows(
             CompilationFailedException.class,
-            () -> runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output));
+            () -> runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output, external));
     assertThat(
         exception.getCause().getMessage(),
         containsString("can be relocated by multiple mappings."));
@@ -188,7 +184,7 @@
     mapping.put(originalPrefix, newPrefix);
     mapping.put(newPrefix, "qux");
     Path output = temp.newFile("output.jar").toPath();
-    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output);
+    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output, external);
     inspectAllClassesRelocated(
         ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, output, originalPrefix, newPrefix);
     // Assert that no mappings of com.android.tools.r8 -> qux exists.
@@ -223,7 +219,7 @@
       }
     }
     Path output = temp.newFile("output.jar").toPath();
-    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output);
+    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output, external);
     for (Pair<String, String> packageMapping : packageMappings) {
       inspectAllClassesRelocated(
           ToolHelper.CHECKED_IN_R8_17_WITH_DEPS,
@@ -240,7 +236,7 @@
     Map<String, String> mapping = new LinkedHashMap<>();
     mapping.put(originalPrefix, newPrefix);
     Path output = temp.newFile("output.jar").toPath();
-    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output);
+    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output, external);
     inspectAllClassesRelocated(
         ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, output, originalPrefix, originalPrefix);
   }
@@ -252,7 +248,7 @@
     Map<String, String> mapping = new LinkedHashMap<>();
     mapping.put(originalPrefix, newPrefix);
     Path output = temp.newFile("output.jar").toPath();
-    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output);
+    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output, external);
     // Check that all classes has been remapped.
     inspectAllClassesRelocated(
         ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, output, originalPrefix, newPrefix);
@@ -288,7 +284,7 @@
     Path output = temp.newFile("output.jar").toPath();
     Map<String, String> mapping = new HashMap<>();
     mapping.put(originalPrefix, newPrefix);
-    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output);
+    runRelocator(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS, mapping, output, external);
     // Assert that all classes are the same, have the same methods and nest info.
     CodeInspector originalInspector = new CodeInspector(ToolHelper.CHECKED_IN_R8_17_WITH_DEPS);
     CodeInspector relocatedInspector = new CodeInspector(output);
@@ -306,58 +302,4 @@
     }
   }
 
-  private void runRelocator(Path input, Map<String, String> mapping, Path output)
-      throws CompilationFailedException {
-    if (external) {
-      List<String> args = new ArrayList<>();
-      args.add("--input");
-      args.add(input.toString());
-      args.add("--output");
-      args.add(output.toString());
-      mapping.forEach(
-          (key, value) -> {
-            args.add("--map");
-            args.add(key + "->" + value);
-          });
-      RelocatorCommandLine.run(args.toArray(new String[0]));
-    } else {
-      RelocatorCommand.Builder builder =
-          RelocatorCommand.builder().addProgramFiles(input).setOutputPath(output);
-      mapping.forEach(
-          (key, value) ->
-              builder.addPackageMapping(
-                  Reference.packageFromString(key), Reference.packageFromString(value)));
-      Relocator.run(builder.build());
-    }
-  }
-
-  private void inspectAllClassesRelocated(
-      Path original, Path relocated, String originalPrefix, String newPrefix) throws IOException {
-    CodeInspector originalInspector = new CodeInspector(original);
-    CodeInspector relocatedInspector = new CodeInspector(relocated);
-    for (FoundClassSubject clazz : originalInspector.allClasses()) {
-      if (originalPrefix.isEmpty()
-          || clazz
-              .getFinalName()
-              .startsWith(originalPrefix + DescriptorUtils.JAVA_PACKAGE_SEPARATOR)) {
-        String relocatedName = newPrefix + clazz.getFinalName().substring(originalPrefix.length());
-        ClassSubject relocatedClass = relocatedInspector.clazz(relocatedName);
-        assertThat(relocatedClass, isPresent());
-      }
-    }
-  }
-
-  private void inspectAllSignaturesNotContainingString(Path relocated, String originalPrefix)
-      throws IOException {
-    CodeInspector relocatedInspector = new CodeInspector(relocated);
-    for (FoundClassSubject clazz : relocatedInspector.allClasses()) {
-      assertThat(clazz.getFinalSignatureAttribute(), not(containsString(originalPrefix)));
-      for (FoundMethodSubject method : clazz.allMethods()) {
-        assertThat(method.getJvmMethodSignatureAsString(), not(containsString(originalPrefix)));
-      }
-      for (FoundFieldSubject field : clazz.allFields()) {
-        assertThat(field.getJvmFieldSignatureAsString(), not(containsString(originalPrefix)));
-      }
-    }
-  }
 }
diff --git a/src/test/java/com/android/tools/r8/relocator/RelocatorUtils.java b/src/test/java/com/android/tools/r8/relocator/RelocatorUtils.java
new file mode 100644
index 0000000..de65492
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/relocator/RelocatorUtils.java
@@ -0,0 +1,83 @@
+// Copyright (c) 2023, 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.relocator;
+
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.references.Reference;
+import com.android.tools.r8.utils.DescriptorUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
+import com.android.tools.r8.utils.codeinspector.FoundFieldSubject;
+import com.android.tools.r8.utils.codeinspector.FoundMethodSubject;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class RelocatorUtils {
+
+  public static void runRelocator(
+      Path input, Map<String, String> mapping, Path output, boolean external)
+      throws CompilationFailedException {
+    if (external) {
+      List<String> args = new ArrayList<>();
+      args.add("--input");
+      args.add(input.toString());
+      args.add("--output");
+      args.add(output.toString());
+      mapping.forEach(
+          (key, value) -> {
+            args.add("--map");
+            args.add(key + "->" + value);
+          });
+      RelocatorCommandLine.run(args.toArray(new String[0]));
+    } else {
+      RelocatorCommand.Builder builder =
+          RelocatorCommand.builder().addProgramFiles(input).setOutputPath(output);
+      mapping.forEach(
+          (key, value) ->
+              builder.addPackageMapping(
+                  Reference.packageFromString(key), Reference.packageFromString(value)));
+      Relocator.run(builder.build());
+    }
+  }
+
+  public static void inspectAllClassesRelocated(
+      Path original, Path relocated, String originalPrefix, String newPrefix) throws IOException {
+    CodeInspector originalInspector = new CodeInspector(original);
+    CodeInspector relocatedInspector = new CodeInspector(relocated);
+    for (FoundClassSubject clazz : originalInspector.allClasses()) {
+      if (originalPrefix.isEmpty()
+          || clazz
+              .getFinalName()
+              .startsWith(originalPrefix + DescriptorUtils.JAVA_PACKAGE_SEPARATOR)) {
+        String relocatedName = newPrefix + clazz.getFinalName().substring(originalPrefix.length());
+        ClassSubject relocatedClass = relocatedInspector.clazz(relocatedName);
+        assertThat(relocatedClass, isPresent());
+      }
+    }
+  }
+
+  public static void inspectAllSignaturesNotContainingString(Path relocated, String originalPrefix)
+      throws IOException {
+    CodeInspector relocatedInspector = new CodeInspector(relocated);
+    for (FoundClassSubject clazz : relocatedInspector.allClasses()) {
+      assertThat(clazz.getFinalSignatureAttribute(), not(containsString(originalPrefix)));
+      for (FoundMethodSubject method : clazz.allMethods()) {
+        assertThat(method.getJvmMethodSignatureAsString(), not(containsString(originalPrefix)));
+      }
+      for (FoundFieldSubject field : clazz.allFields()) {
+        assertThat(field.getJvmFieldSignatureAsString(), not(containsString(originalPrefix)));
+      }
+    }
+  }
+}