Don't use reflective lookups for art profile rewriting in compiledump

Bug:  b/377606434
Change-Id: I87d70c812be7bc96486c5901e910600e2ec27154
diff --git a/src/main/java/com/android/tools/r8/utils/CompileDumpBase.java b/src/main/java/com/android/tools/r8/utils/CompileDumpBase.java
index 12e971a..54f2ff4 100644
--- a/src/main/java/com/android/tools/r8/utils/CompileDumpBase.java
+++ b/src/main/java/com/android/tools/r8/utils/CompileDumpBase.java
@@ -4,6 +4,8 @@
 
 package com.android.tools.r8.utils;
 
+import com.android.tools.r8.BaseCompilerCommand;
+import com.android.tools.r8.utils.compiledump.ArtProfileDumpUtils;
 import java.io.IOException;
 import java.lang.reflect.Method;
 import java.nio.file.Files;
@@ -12,6 +14,7 @@
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.function.Consumer;
 import java.util.function.Function;
 
@@ -34,26 +37,14 @@
         .accept(new Object[] {isolatedSplits});
   }
 
-  static void addArtProfilesForRewriting(Object builder, Map<Path, Path> artProfileFiles) {
-    try {
-      Class<?> artProfileProviderClass =
-          Class.forName("com.android.tools.r8.profile.art.ArtProfileProvider");
-      Class<?> artProfileConsumerClass =
-          Class.forName("com.android.tools.r8.profile.art.ArtProfileConsumer");
-      artProfileFiles.forEach(
-          (artProfile, residualArtProfile) ->
-              getReflectiveBuilderMethod(
-                      builder,
-                      "addArtProfileForRewriting",
-                      artProfileProviderClass,
-                      artProfileConsumerClass)
-                  .accept(
-                      new Object[] {
-                        createArtProfileProvider(artProfile),
-                        createResidualArtProfileConsumer(residualArtProfile)
-                      }));
-    } catch (ClassNotFoundException e) {
-      // Ignore.
+  static void addArtProfilesForRewriting(
+      BaseCompilerCommand.Builder<?, ?> builder, Map<Path, Path> artProfileFiles) {
+    for (Entry<Path, Path> inputOutput : artProfileFiles.entrySet()) {
+      runIgnoreMissing(
+          () ->
+              ArtProfileDumpUtils.addArtProfileForRewriting(
+                  inputOutput.getKey(), inputOutput.getValue(), builder),
+          "Unable to setup art profile rewriting for " + inputOutput.getKey());
     }
   }
 
@@ -62,36 +53,6 @@
         .accept(new Object[] {createStartupProfileProviders(startupProfileFiles)});
   }
 
-  static Object callReflectiveDumpUtilsMethodWithPath(Path path, String method) {
-    Object[] returnObject = new Object[1];
-    boolean found =
-        callReflectiveUtilsMethod(
-            method,
-            new Class<?>[] {Path.class},
-            fn -> returnObject[0] = fn.apply(new Object[] {path}));
-    if (!found) {
-      System.out.println(
-          "Unable to call invoke method on path "
-              + path
-              + ". "
-              + "Method "
-              + method
-              + "() was not found.");
-      return null;
-    }
-    return returnObject[0];
-  }
-
-  static Object createArtProfileProvider(Path artProfile) {
-    return callReflectiveDumpUtilsMethodWithPath(
-        artProfile, "createArtProfileProviderFromDumpFile");
-  }
-
-  static Object createResidualArtProfileConsumer(Path residualArtProfile) {
-    return callReflectiveDumpUtilsMethodWithPath(
-        residualArtProfile, "createResidualArtProfileConsumerFromDumpFile");
-  }
-
   static Collection<Object> createStartupProfileProviders(List<Path> startupProfileFiles) {
     List<Object> startupProfileProviders = new ArrayList<>();
     for (Path startupProfileFile : startupProfileFiles) {
@@ -169,4 +130,12 @@
 
     return content;
   }
+
+  protected static void runIgnoreMissing(Runnable runnable, String onMissing) {
+    try {
+      runnable.run();
+    } catch (NoClassDefFoundError | NoSuchMethodError e) {
+      System.out.println(onMissing);
+    }
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java b/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
index e9e8ae5..023d8e1 100644
--- a/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
+++ b/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
@@ -283,12 +283,4 @@
       R8.run(command);
     }
   }
-
-  private static void runIgnoreMissing(Runnable runnable, String onMissing) {
-    try {
-      runnable.run();
-    } catch (NoClassDefFoundError | NoSuchMethodError e) {
-      System.out.println(onMissing);
-    }
-  }
 }
diff --git a/src/main/java/com/android/tools/r8/utils/CompileDumpUtils.java b/src/main/java/com/android/tools/r8/utils/CompileDumpUtils.java
index 4356671..c2e3592 100644
--- a/src/main/java/com/android/tools/r8/utils/CompileDumpUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/CompileDumpUtils.java
@@ -7,10 +7,6 @@
 import com.android.tools.r8.KeepMethodForCompileDump;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
-import com.android.tools.r8.profile.art.ArtProfileConsumer;
-import com.android.tools.r8.profile.art.ArtProfileConsumerUtils;
-import com.android.tools.r8.profile.art.ArtProfileProvider;
-import com.android.tools.r8.profile.art.ArtProfileProviderUtils;
 import com.android.tools.r8.references.MethodReference;
 import com.android.tools.r8.references.Reference;
 import com.android.tools.r8.startup.StartupProfileBuilder;
@@ -24,16 +20,6 @@
 class CompileDumpUtils {
 
   @KeepMethodForCompileDump
-  static ArtProfileProvider createArtProfileProviderFromDumpFile(Path artProfile) {
-    return ArtProfileProviderUtils.createFromHumanReadableArtProfile(artProfile);
-  }
-
-  @KeepMethodForCompileDump
-  static ArtProfileConsumer createResidualArtProfileConsumerFromDumpFile(Path residualArtProfile) {
-    return ArtProfileConsumerUtils.create(residualArtProfile);
-  }
-
-  @KeepMethodForCompileDump
   static StartupProfileProvider createStartupProfileProviderFromDumpFile(Path path) {
     return new StartupProfileProvider() {
 
diff --git a/src/main/java/com/android/tools/r8/utils/compiledump/ArtProfileDumpUtils.java b/src/main/java/com/android/tools/r8/utils/compiledump/ArtProfileDumpUtils.java
new file mode 100644
index 0000000..51935bb
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/utils/compiledump/ArtProfileDumpUtils.java
@@ -0,0 +1,19 @@
+// Copyright (c) 2024, 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.utils.compiledump;
+
+import com.android.tools.r8.BaseCompilerCommand;
+import com.android.tools.r8.profile.art.ArtProfileConsumerUtils;
+import com.android.tools.r8.profile.art.ArtProfileProviderUtils;
+import java.nio.file.Path;
+
+public class ArtProfileDumpUtils {
+  public static void addArtProfileForRewriting(
+      Path input, Path output, BaseCompilerCommand.Builder<?, ?> builder) {
+    builder.addArtProfileForRewriting(
+        ArtProfileProviderUtils.createFromHumanReadableArtProfile(input),
+        ArtProfileConsumerUtils.create(output));
+  }
+}