Fix usage of internal API from compile dump classes

Change-Id: Ib753d947ece51b346a6da116b9e2ff5e99c793b8
diff --git a/src/main/java/com/android/tools/r8/experimental/startup/StartupProfileProviderUtils.java b/src/main/java/com/android/tools/r8/experimental/startup/StartupProfileProviderUtils.java
index f7de084..3b5b940 100644
--- a/src/main/java/com/android/tools/r8/experimental/startup/StartupProfileProviderUtils.java
+++ b/src/main/java/com/android/tools/r8/experimental/startup/StartupProfileProviderUtils.java
@@ -9,68 +9,18 @@
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
 import com.android.tools.r8.profile.art.ArtProfileBuilderUtils.SyntheticToSyntheticContextGeneralization;
-import com.android.tools.r8.references.MethodReference;
-import com.android.tools.r8.references.Reference;
 import com.android.tools.r8.startup.StartupProfileBuilder;
 import com.android.tools.r8.startup.StartupProfileProvider;
 import com.android.tools.r8.startup.diagnostic.MissingStartupProfileItemsDiagnostic;
 import com.android.tools.r8.utils.ConsumerUtils;
-import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.MethodReferenceUtils;
 import com.android.tools.r8.utils.UTF8TextInputStream;
-import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.UncheckedIOException;
-import java.nio.file.Files;
 import java.nio.file.Path;
 
 public class StartupProfileProviderUtils {
 
-  public static StartupProfileProvider createFromDumpFile(Path path) {
-    return new StartupProfileProvider() {
-
-      @Override
-      public void getStartupProfile(StartupProfileBuilder startupProfileBuilder) {
-        try {
-          try (BufferedReader bufferedReader = Files.newBufferedReader(path)) {
-            while (bufferedReader.ready()) {
-              String rule = bufferedReader.readLine();
-              if (rule.charAt(0) == 'S') {
-                String classDescriptor = rule.substring(1);
-                assert DescriptorUtils.isClassDescriptor(classDescriptor);
-                startupProfileBuilder.addSyntheticStartupMethod(
-                    syntheticStartupMethodBuilder ->
-                        syntheticStartupMethodBuilder.setSyntheticContextReference(
-                            Reference.classFromDescriptor(classDescriptor)));
-              } else {
-                MethodReference methodReference = MethodReferenceUtils.parseSmaliString(rule);
-                if (methodReference != null) {
-                  startupProfileBuilder.addStartupMethod(
-                      startupMethodBuilder ->
-                          startupMethodBuilder.setMethodReference(methodReference));
-                } else {
-                  assert DescriptorUtils.isClassDescriptor(rule);
-                  startupProfileBuilder.addStartupClass(
-                      startupClassBuilder ->
-                          startupClassBuilder.setClassReference(
-                              Reference.classFromDescriptor(rule)));
-                }
-              }
-            }
-          }
-        } catch (IOException e) {
-          throw new UncheckedIOException(e);
-        }
-      }
-
-      @Override
-      public Origin getOrigin() {
-        return new PathOrigin(path);
-      }
-    };
-  }
-
   public static StartupProfileProvider createFromHumanReadableArtProfile(Path path) {
     return new StartupProfileProvider() {
 
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 82f1ce4..90a6eb2 100644
--- a/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
+++ b/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.R8;
 import com.android.tools.r8.R8Command;
 import com.android.tools.r8.R8Command.Builder;
-import com.android.tools.r8.experimental.startup.StartupProfileProviderUtils;
 import java.io.IOException;
 import java.lang.reflect.Method;
 import java.nio.file.Files;
@@ -19,6 +18,7 @@
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -210,10 +210,6 @@
             .addClasspathFiles(classpath)
             .addProguardConfigurationFiles(config)
             .addMainDexRulesFiles(mainDexRulesFiles)
-            .addStartupProfileProviders(
-                startupProfileFiles.stream()
-                    .map(StartupProfileProviderUtils::createFromDumpFile)
-                    .collect(Collectors.toList()))
             .setOutput(outputPath, outputMode)
             .setMode(compilationMode);
     getReflectiveBuilderMethod(
@@ -221,6 +217,13 @@
         .accept(new Object[] {enableMissingLibraryApiModeling});
     getReflectiveBuilderMethod(commandBuilder, "setAndroidPlatformBuild", boolean.class)
         .accept(new Object[] {androidPlatformBuild});
+    getReflectiveBuilderMethod(commandBuilder, "addStartupProfileProviders", Collection.class)
+        .accept(
+            new Object[] {
+              startupProfileFiles.stream()
+                  .map(CompileDumpUtils::createStartupProfileProviderFromDumpFile)
+                  .collect(Collectors.toList())
+            });
     if (desugaredLibJson != null) {
       commandBuilder.addDesugaredLibraryConfiguration(readAllBytesJava7(desugaredLibJson));
     }
diff --git a/src/main/java/com/android/tools/r8/utils/CompileDumpD8.java b/src/main/java/com/android/tools/r8/utils/CompileDumpD8.java
index f1007f6..32892d7 100644
--- a/src/main/java/com/android/tools/r8/utils/CompileDumpD8.java
+++ b/src/main/java/com/android/tools/r8/utils/CompileDumpD8.java
@@ -8,7 +8,6 @@
 import com.android.tools.r8.D8;
 import com.android.tools.r8.D8Command;
 import com.android.tools.r8.OutputMode;
-import com.android.tools.r8.experimental.startup.StartupProfileProviderUtils;
 import java.io.IOException;
 import java.lang.reflect.Method;
 import java.nio.file.Files;
@@ -16,6 +15,7 @@
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -153,10 +153,6 @@
             .addLibraryFiles(library)
             .addClasspathFiles(classpath)
             .addMainDexRulesFiles(mainDexRulesFiles)
-            .addStartupProfileProviders(
-                startupProfileFiles.stream()
-                    .map(StartupProfileProviderUtils::createFromDumpFile)
-                    .collect(Collectors.toList()))
             .setOutput(outputPath, outputMode)
             .setMode(compilationMode);
     getReflectiveBuilderMethod(
@@ -164,6 +160,13 @@
         .accept(new Object[] {enableMissingLibraryApiModeling});
     getReflectiveBuilderMethod(commandBuilder, "setAndroidPlatformBuild", boolean.class)
         .accept(new Object[] {androidPlatformBuild});
+    getReflectiveBuilderMethod(commandBuilder, "addStartupProfileProviders", Collection.class)
+        .accept(
+            new Object[] {
+              startupProfileFiles.stream()
+                  .map(CompileDumpUtils::createStartupProfileProviderFromDumpFile)
+                  .collect(Collectors.toList())
+            });
     if (desugaredLibJson != null) {
       commandBuilder.addDesugaredLibraryConfiguration(readAllBytesJava7(desugaredLibJson));
     }
diff --git a/src/main/java/com/android/tools/r8/utils/CompileDumpUtils.java b/src/main/java/com/android/tools/r8/utils/CompileDumpUtils.java
new file mode 100644
index 0000000..7114ef8
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/utils/CompileDumpUtils.java
@@ -0,0 +1,66 @@
+// Copyright (c) 2022, 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;
+
+import com.android.tools.r8.Keep;
+import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.origin.PathOrigin;
+import com.android.tools.r8.references.MethodReference;
+import com.android.tools.r8.references.Reference;
+import com.android.tools.r8.startup.StartupProfileBuilder;
+import com.android.tools.r8.startup.StartupProfileProvider;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+@Keep
+class CompileDumpUtils {
+
+  static StartupProfileProvider createStartupProfileProviderFromDumpFile(Path path) {
+    return new StartupProfileProvider() {
+
+      @Override
+      public void getStartupProfile(StartupProfileBuilder startupProfileBuilder) {
+        try {
+          try (BufferedReader bufferedReader = Files.newBufferedReader(path)) {
+            while (bufferedReader.ready()) {
+              String rule = bufferedReader.readLine();
+              if (rule.charAt(0) == 'S') {
+                String classDescriptor = rule.substring(1);
+                assert DescriptorUtils.isClassDescriptor(classDescriptor);
+                startupProfileBuilder.addSyntheticStartupMethod(
+                    syntheticStartupMethodBuilder ->
+                        syntheticStartupMethodBuilder.setSyntheticContextReference(
+                            Reference.classFromDescriptor(classDescriptor)));
+              } else {
+                MethodReference methodReference = MethodReferenceUtils.parseSmaliString(rule);
+                if (methodReference != null) {
+                  startupProfileBuilder.addStartupMethod(
+                      startupMethodBuilder ->
+                          startupMethodBuilder.setMethodReference(methodReference));
+                } else {
+                  assert DescriptorUtils.isClassDescriptor(rule);
+                  startupProfileBuilder.addStartupClass(
+                      startupClassBuilder ->
+                          startupClassBuilder.setClassReference(
+                              Reference.classFromDescriptor(rule)));
+                }
+              }
+            }
+          }
+        } catch (IOException e) {
+          throw new UncheckedIOException(e);
+        }
+      }
+
+      @Override
+      public Origin getOrigin() {
+        return new PathOrigin(path);
+      }
+    };
+  }
+}