Add internal API for adding art profiles to command builders

This allows configuring the D8/R8 commands of L8 such that art profiles given to L8 is correctly rewritten (see also DesugaredLibraryArtProfileRewritingTest).

Change-Id: Ied7993137154f3faf58cbf7bd8042294fcbe8a7a
diff --git a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
index 02e06d1..0900897 100644
--- a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
+++ b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
@@ -12,6 +12,7 @@
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecification;
 import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.profile.art.ArtProfileInput;
 import com.android.tools.r8.startup.StartupProfileProvider;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
@@ -57,6 +58,7 @@
   private final MapIdProvider mapIdProvider;
   private final SourceFileProvider sourceFileProvider;
   private final boolean isAndroidPlatformBuild;
+  private final List<ArtProfileInput> artProfileInputs;
   private final List<StartupProfileProvider> startupProfileProviders;
   private final ClassConflictResolver classConflictResolver;
 
@@ -78,6 +80,7 @@
     mapIdProvider = null;
     sourceFileProvider = null;
     isAndroidPlatformBuild = false;
+    artProfileInputs = null;
     startupProfileProviders = null;
     classConflictResolver = null;
   }
@@ -100,6 +103,7 @@
       MapIdProvider mapIdProvider,
       SourceFileProvider sourceFileProvider,
       boolean isAndroidPlatformBuild,
+      List<ArtProfileInput> artProfileInputs,
       List<StartupProfileProvider> startupProfileProviders,
       ClassConflictResolver classConflictResolver) {
     super(app);
@@ -121,6 +125,7 @@
     this.mapIdProvider = mapIdProvider;
     this.sourceFileProvider = sourceFileProvider;
     this.isAndroidPlatformBuild = isAndroidPlatformBuild;
+    this.artProfileInputs = artProfileInputs;
     this.startupProfileProviders = startupProfileProviders;
     this.classConflictResolver = classConflictResolver;
   }
@@ -219,6 +224,10 @@
     return isAndroidPlatformBuild;
   }
 
+  List<ArtProfileInput> getArtProfileInputs() {
+    return artProfileInputs;
+  }
+
   List<StartupProfileProvider> getStartupProfileProviders() {
     return startupProfileProviders;
   }
@@ -268,6 +277,7 @@
     private MapIdProvider mapIdProvider = null;
     private SourceFileProvider sourceFileProvider = null;
     private boolean isAndroidPlatformBuild = false;
+    private List<ArtProfileInput> artProfileInputs = new ArrayList<>();
     private List<StartupProfileProvider> startupProfileProviders = new ArrayList<>();
     private ClassConflictResolver classConflictResolver = null;
 
@@ -685,6 +695,19 @@
       return isAndroidPlatformBuild;
     }
 
+    B addArtProfileInputs(ArtProfileInput... artProfileInputs) {
+      return addArtProfileInputs(Arrays.asList(artProfileInputs));
+    }
+
+    B addArtProfileInputs(Collection<ArtProfileInput> artProfileInputs) {
+      this.artProfileInputs.addAll(artProfileInputs);
+      return self();
+    }
+
+    List<ArtProfileInput> getArtProfileInputs() {
+      return artProfileInputs;
+    }
+
     B addStartupProfileProviders(StartupProfileProvider... startupProfileProviders) {
       return addStartupProfileProviders(Arrays.asList(startupProfileProviders));
     }
diff --git a/src/main/java/com/android/tools/r8/D8Command.java b/src/main/java/com/android/tools/r8/D8Command.java
index 4c2f363..687da32 100644
--- a/src/main/java/com/android/tools/r8/D8Command.java
+++ b/src/main/java/com/android/tools/r8/D8Command.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.inspector.internal.InspectorImpl;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecification;
 import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.profile.art.ArtProfileInput;
 import com.android.tools.r8.shaking.ProguardConfigurationParser;
 import com.android.tools.r8.shaking.ProguardConfigurationRule;
 import com.android.tools.r8.shaking.ProguardConfigurationSource;
@@ -457,6 +458,7 @@
           proguardMapConsumer,
           enableMissingLibraryApiModeling,
           getAndroidPlatformBuild(),
+          getArtProfileInputs(),
           getStartupProfileProviders(),
           getClassConflictResolver(),
           factory);
@@ -549,6 +551,7 @@
       StringConsumer proguardMapConsumer,
       boolean enableMissingLibraryApiModeling,
       boolean isAndroidPlatformBuild,
+      List<ArtProfileInput> artProfileInputs,
       List<StartupProfileProvider> startupProfileProviders,
       ClassConflictResolver classConflictResolver,
       DexItemFactory factory) {
@@ -570,6 +573,7 @@
         mapIdProvider,
         null,
         isAndroidPlatformBuild,
+        artProfileInputs,
         startupProfileProviders,
         classConflictResolver);
     this.intermediate = intermediate;
@@ -694,7 +698,7 @@
 
     internal.configureAndroidPlatformBuild(getAndroidPlatformBuild());
 
-    internal.getArtProfileOptions().setPassthrough(true);
+    internal.getArtProfileOptions().setArtProfileInputs(getArtProfileInputs()).setPassthrough(true);
     internal.getStartupOptions().setStartupProfileProviders(getStartupProfileProviders());
 
     internal.programClassConflictResolver =
diff --git a/src/main/java/com/android/tools/r8/L8Command.java b/src/main/java/com/android/tools/r8/L8Command.java
index 7a2950d..123c7d3 100644
--- a/src/main/java/com/android/tools/r8/L8Command.java
+++ b/src/main/java/com/android/tools/r8/L8Command.java
@@ -121,6 +121,7 @@
         null,
         false,
         null,
+        null,
         classConflictResolver);
     this.d8Command = d8Command;
     this.r8Command = r8Command;
@@ -371,7 +372,8 @@
                 .setMode(getMode())
                 .setIncludeClassesChecksum(getIncludeClassesChecksum())
                 .setDexClassChecksumFilter(getDexClassChecksumFilter())
-                .setProgramConsumer(getProgramConsumer());
+                .setProgramConsumer(getProgramConsumer())
+                .addArtProfileInputs(getArtProfileInputs());
         for (ClassFileResourceProvider libraryResourceProvider :
             inputs.getLibraryResourceProviders()) {
           r8Builder.addLibraryResourceProvider(libraryResourceProvider);
@@ -402,7 +404,8 @@
                 .setMode(getMode())
                 .setIncludeClassesChecksum(getIncludeClassesChecksum())
                 .setDexClassChecksumFilter(getDexClassChecksumFilter())
-                .setProgramConsumer(getProgramConsumer());
+                .setProgramConsumer(getProgramConsumer())
+                .addArtProfileInputs(getArtProfileInputs());
         for (ClassFileResourceProvider libraryResourceProvider :
             inputs.getLibraryResourceProviders()) {
           d8Builder.addLibraryResourceProvider(libraryResourceProvider);
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index ec7209a..55963a2 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -18,6 +18,7 @@
 import com.android.tools.r8.naming.SourceFileRewriter;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
+import com.android.tools.r8.profile.art.ArtProfileInput;
 import com.android.tools.r8.shaking.ProguardConfiguration;
 import com.android.tools.r8.shaking.ProguardConfigurationParser;
 import com.android.tools.r8.shaking.ProguardConfigurationParserOptions;
@@ -662,6 +663,7 @@
               getSourceFileProvider(),
               enableMissingLibraryApiModeling,
               getAndroidPlatformBuild(),
+              getArtProfileInputs(),
               getStartupProfileProviders(),
               getClassConflictResolver());
 
@@ -850,6 +852,7 @@
       SourceFileProvider sourceFileProvider,
       boolean enableMissingLibraryApiModeling,
       boolean isAndroidPlatformBuild,
+      List<ArtProfileInput> artProfileInputs,
       List<StartupProfileProvider> startupProfileProviders,
       ClassConflictResolver classConflictResolver) {
     super(
@@ -870,6 +873,7 @@
         mapIdProvider,
         sourceFileProvider,
         isAndroidPlatformBuild,
+        artProfileInputs,
         startupProfileProviders,
         classConflictResolver);
     assert proguardConfiguration != null;
@@ -1071,6 +1075,7 @@
 
     internal.configureAndroidPlatformBuild(getAndroidPlatformBuild());
 
+    internal.getArtProfileOptions().setArtProfileInputs(getArtProfileInputs());
     internal.getStartupOptions().setStartupProfileProviders(getStartupProfileProviders());
 
     internal.programClassConflictResolver =
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfile.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfile.java
index de8abb8..37b9011 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfile.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfile.java
@@ -28,6 +28,7 @@
   private final List<ArtProfileRule> rules;
 
   ArtProfile(List<ArtProfileRule> rules) {
+    assert !rules.isEmpty();
     this.rules = rules;
   }
 
diff --git a/src/test/java/com/android/tools/r8/D8TestBuilder.java b/src/test/java/com/android/tools/r8/D8TestBuilder.java
index 8f465ff..5c492f7 100644
--- a/src/test/java/com/android/tools/r8/D8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/D8TestBuilder.java
@@ -7,6 +7,7 @@
 import com.android.tools.r8.TestBase.Backend;
 import com.android.tools.r8.benchmarks.BenchmarkResults;
 import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.profile.art.ArtProfileInput;
 import com.android.tools.r8.startup.StartupProfileProvider;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.InternalOptions;
@@ -130,6 +131,16 @@
     return self();
   }
 
+  public D8TestBuilder addArtProfileInputs(ArtProfileInput... artProfileInputs) {
+    builder.addArtProfileInputs(artProfileInputs);
+    return self();
+  }
+
+  public D8TestBuilder addArtProfileInputs(Collection<ArtProfileInput> artProfileInputs) {
+    builder.addArtProfileInputs(artProfileInputs);
+    return self();
+  }
+
   public D8TestBuilder addStartupProfileProviders(
       StartupProfileProvider... startupProfileProviders) {
     builder.addStartupProfileProviders(startupProfileProviders);
diff --git a/src/test/java/com/android/tools/r8/L8TestBuilder.java b/src/test/java/com/android/tools/r8/L8TestBuilder.java
index 3050989..e5cb212 100644
--- a/src/test/java/com/android/tools/r8/L8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/L8TestBuilder.java
@@ -11,6 +11,7 @@
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecification;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser;
 import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.profile.art.ArtProfileInput;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidAppConsumers;
 import com.android.tools.r8.utils.ConsumerUtils;
@@ -33,6 +34,7 @@
 
   private final AndroidApiLevel apiLevel;
   private final Backend backend;
+  private final L8Command.Builder l8Builder;
   private final TestState state;
 
   private CompilationMode mode = CompilationMode.RELEASE;
@@ -50,6 +52,7 @@
     this.apiLevel = apiLevel;
     this.backend = backend;
     this.state = state;
+    this.l8Builder = L8Command.builder(state.getDiagnosticsHandler());
   }
 
   public static L8TestBuilder create(AndroidApiLevel apiLevel, Backend backend, TestState state) {
@@ -167,15 +170,14 @@
       throws IOException, CompilationFailedException, ExecutionException {
     // We wrap exceptions in a RuntimeException to call this from a lambda.
     AndroidAppConsumers sink = new AndroidAppConsumers();
-    L8Command.Builder l8Builder =
-        L8Command.builder(state.getDiagnosticsHandler())
-            .addProgramFiles(programFiles)
-            .addLibraryFiles(getLibraryFiles())
-            .setMode(mode)
-            .setIncludeClassesChecksum(true)
-            .addDesugaredLibraryConfiguration(desugaredLibrarySpecification)
-            .setMinApiLevel(apiLevel.getLevel())
-            .setProgramConsumer(computeProgramConsumer(sink));
+    l8Builder
+        .addProgramFiles(programFiles)
+        .addLibraryFiles(getLibraryFiles())
+        .setMode(mode)
+        .setIncludeClassesChecksum(true)
+        .addDesugaredLibraryConfiguration(desugaredLibrarySpecification)
+        .setMinApiLevel(apiLevel.getLevel())
+        .setProgramConsumer(computeProgramConsumer(sink));
     addProgramClassFileData(l8Builder);
     Path mapping = null;
     ImmutableList<String> allKeepRules = null;
@@ -264,4 +266,14 @@
   private Collection<Path> getLibraryFiles() {
     return libraryFiles;
   }
+
+  public L8TestBuilder addArtProfileInputs(ArtProfileInput... artProfileInputs) {
+    l8Builder.addArtProfileInputs(artProfileInputs);
+    return this;
+  }
+
+  public L8TestBuilder addArtProfileInputs(Collection<ArtProfileInput> artProfileInputs) {
+    l8Builder.addArtProfileInputs(artProfileInputs);
+    return this;
+  }
 }
diff --git a/src/test/java/com/android/tools/r8/R8TestBuilder.java b/src/test/java/com/android/tools/r8/R8TestBuilder.java
index 53ff395..1cecce2 100644
--- a/src/test/java/com/android/tools/r8/R8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/R8TestBuilder.java
@@ -15,6 +15,7 @@
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.experimental.graphinfo.GraphConsumer;
 import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.profile.art.ArtProfileInput;
 import com.android.tools.r8.shaking.CheckEnumUnboxedRule;
 import com.android.tools.r8.shaking.CollectingGraphConsumer;
 import com.android.tools.r8.shaking.KeepUnusedReturnValueRule;
@@ -778,6 +779,16 @@
     return self();
   }
 
+  public T addArtProfileInputs(ArtProfileInput... artProfileInputs) {
+    builder.addArtProfileInputs(artProfileInputs);
+    return self();
+  }
+
+  public T addArtProfileInputs(Collection<ArtProfileInput> artProfileInputs) {
+    builder.addArtProfileInputs(artProfileInputs);
+    return self();
+  }
+
   public T addStartupProfileProviders(StartupProfileProvider... startupProfileProviders) {
     builder.addStartupProfileProviders(startupProfileProviders);
     return self();
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
index 4b41588..77e3488 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
@@ -24,6 +24,7 @@
 import com.android.tools.r8.desugar.desugaredlibrary.DesugaredLibraryTestBase;
 import com.android.tools.r8.desugar.desugaredlibrary.DesugaredLibraryTestBase.KeepRuleConsumer;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser;
+import com.android.tools.r8.profile.art.ArtProfileInput;
 import com.android.tools.r8.tracereferences.TraceReferences;
 import com.android.tools.r8.utils.ConsumerUtils;
 import com.android.tools.r8.utils.FileUtils;
@@ -34,6 +35,8 @@
 import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import org.junit.Assume;
@@ -45,6 +48,7 @@
   private final LibraryDesugaringSpecification libraryDesugaringSpecification;
   private final CompilationSpecification compilationSpecification;
   private final TestCompilerBuilder<?, ?, ?, ? extends SingleTestRunResult<?>, ?> builder;
+  private List<ArtProfileInput> l8ArtProfileInputs = new ArrayList<>();
   private String l8ExtraKeepRules = "";
   private Consumer<InternalOptions> l8OptionModifier = ConsumerUtils.emptyConsumer();
   private boolean l8FinalPrefixVerification = true;
@@ -416,7 +420,8 @@
         .applyIf(
             compilationSpecification.isL8Shrink() && !backend.isCf() && !l8ExtraKeepRules.isEmpty(),
             b -> b.addKeepRules(l8ExtraKeepRules))
-        .addOptionsModifier(l8OptionModifier);
+        .addOptionsModifier(l8OptionModifier)
+        .addArtProfileInputs(l8ArtProfileInputs);
   }
 
   public String collectKeepRulesWithTraceReferences(
@@ -482,4 +487,16 @@
     builder.disableDesugaring();
     return this;
   }
+
+  public DesugaredLibraryTestBuilder<?> addL8ArtProfileInputs(
+      ArtProfileInput... l8ArtProfileInputs) {
+    Collections.addAll(this.l8ArtProfileInputs, l8ArtProfileInputs);
+    return this;
+  }
+
+  public DesugaredLibraryTestBuilder<?> addL8ArtProfileInputs(
+      Collection<ArtProfileInput> l8ArtProfileInputs) {
+    this.l8ArtProfileInputs.addAll(l8ArtProfileInputs);
+    return this;
+  }
 }
diff --git a/src/test/java/com/android/tools/r8/profile/art/ArtProfileCollisionAfterClassMergingRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/ArtProfileCollisionAfterClassMergingRewritingTest.java
index c5c2efe..f37483a 100644
--- a/src/test/java/com/android/tools/r8/profile/art/ArtProfileCollisionAfterClassMergingRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/ArtProfileCollisionAfterClassMergingRewritingTest.java
@@ -22,7 +22,6 @@
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import com.google.common.collect.Lists;
-import java.util.Collections;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -60,11 +59,7 @@
     testForR8(Backend.DEX)
         .addInnerClasses(getClass())
         .addKeepMainRule(Main.class)
-        .addOptionsModification(
-            options ->
-                options
-                    .getArtProfileOptions()
-                    .setArtProfileInputs(Collections.singleton(artProfileInput)))
+        .addArtProfileInputs(artProfileInput)
         .addHorizontallyMergedClassesInspector(
             inspector ->
                 inspector.assertMergedInto(Foo.class, Bar.class).assertNoOtherClassesMerged())
diff --git a/src/test/java/com/android/tools/r8/profile/art/ArtProfilePassthroughTest.java b/src/test/java/com/android/tools/r8/profile/art/ArtProfilePassthroughTest.java
index 1a6fdac..6fb97bd 100644
--- a/src/test/java/com/android/tools/r8/profile/art/ArtProfilePassthroughTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/ArtProfilePassthroughTest.java
@@ -19,7 +19,6 @@
 import com.android.tools.r8.utils.MethodReferenceUtils;
 import com.google.common.collect.Lists;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -55,11 +54,7 @@
         .addProgramClasses(Main.class)
         // Add a profile provider and consumer that verifies that the profile is being provided at
         // the same time it is being consumed.
-        .addOptionsModification(
-            options ->
-                options
-                    .getArtProfileOptions()
-                    .setArtProfileInputs(Collections.singleton(artProfileInput)))
+        .addArtProfileInputs(artProfileInput)
         .release()
         .setMinApi(AndroidApiLevel.LATEST)
         .compile();
diff --git a/src/test/java/com/android/tools/r8/profile/art/ArtProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/ArtProfileRewritingTest.java
index 0a3fa08..677308b 100644
--- a/src/test/java/com/android/tools/r8/profile/art/ArtProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/ArtProfileRewritingTest.java
@@ -22,7 +22,6 @@
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import com.google.common.collect.Lists;
-import java.util.Collections;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -57,11 +56,7 @@
     testForR8(Backend.DEX)
         .addInnerClasses(getClass())
         .addKeepMainRule(Main.class)
-        .addOptionsModification(
-            options ->
-                options
-                    .getArtProfileOptions()
-                    .setArtProfileInputs(Collections.singleton(artProfileInput)))
+        .addArtProfileInputs(artProfileInput)
         .enableInliningAnnotations()
         .setMinApi(AndroidApiLevel.LATEST)
         .compile()
diff --git a/src/test/java/com/android/tools/r8/profile/art/DesugaredLibraryArtProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/DesugaredLibraryArtProfileRewritingTest.java
index 6d53733..7846ba8 100644
--- a/src/test/java/com/android/tools/r8/profile/art/DesugaredLibraryArtProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/DesugaredLibraryArtProfileRewritingTest.java
@@ -16,7 +16,6 @@
 import com.android.tools.r8.desugar.desugaredlibrary.DesugaredLibraryTestBase;
 import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
 import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
-import com.android.tools.r8.references.ClassReference;
 import com.android.tools.r8.references.MethodReference;
 import com.android.tools.r8.references.Reference;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
@@ -24,10 +23,8 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 import org.junit.Assume;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -38,25 +35,6 @@
 @RunWith(Parameterized.class)
 public class DesugaredLibraryArtProfileRewritingTest extends DesugaredLibraryTestBase {
 
-  private static ClassReference jDollarConsumerClassReference =
-      Reference.classFromTypeName("j$.util.function.Consumer");
-  private static ClassReference jDollarStreamClassReference =
-      Reference.classFromTypeName("j$.util.stream.Stream");
-  private static MethodReference jDollarForEachMethodReference =
-      Reference.method(
-          jDollarStreamClassReference,
-          "forEach",
-          ImmutableList.of(jDollarConsumerClassReference),
-          null);
-
-  private static ClassReference javaStreamClassReference = Reference.classFromClass(Stream.class);
-  private static MethodReference javaForEachMethodReference =
-      Reference.method(
-          javaStreamClassReference,
-          "forEach",
-          ImmutableList.of(jDollarConsumerClassReference),
-          null);
-
   @Parameter(0)
   public TestParameters parameters;
 
@@ -84,12 +62,7 @@
     testForDesugaredLibrary(parameters, libraryDesugaringSpecification, compilationSpecification)
         .addInnerClasses(getClass())
         .addKeepMainRule(Main.class)
-        .addL8OptionsModification(
-            options -> {
-              options
-                  .getArtProfileOptions()
-                  .setArtProfileInputs(Collections.singleton(artProfileInput));
-            })
+        .addL8ArtProfileInputs(artProfileInput)
         .compile()
         .inspectL8(
             inspector -> {
@@ -113,11 +86,8 @@
               assertEquals(
                   consumerClassSubject.asTypeSubject(), forEachMethodSubject.getParameter(0));
 
-              // TODO(b/237043695): should be `forEachMethodSubject.getFinalReference()`.
               assertEquals(
-                  libraryDesugaringSpecification == LibraryDesugaringSpecification.JDK11
-                      ? Lists.newArrayList(javaForEachMethodReference)
-                      : Lists.newArrayList(jDollarForEachMethodReference),
+                  Lists.newArrayList(forEachMethodSubject.getFinalReference()),
                   residualArtProfileConsumer.references);
             })
         .run(parameters.getRuntime(), Main.class)
@@ -139,8 +109,17 @@
 
     @Override
     public void getArtProfile(ArtProfileBuilder profileBuilder) {
+      MethodReference forEachMethodReference =
+          Reference.method(
+              Reference.classFromTypeName("j$.util.stream.Stream"),
+              "forEach",
+              ImmutableList.of(
+                  Reference.classFromTypeName(
+                      libraryDesugaringSpecification.functionPrefix(parameters)
+                          + ".util.function.Consumer")),
+              null);
       profileBuilder.addMethodRule(
-          methodRuleBuilder -> methodRuleBuilder.setMethodReference(jDollarForEachMethodReference));
+          methodRuleBuilder -> methodRuleBuilder.setMethodReference(forEachMethodReference));
     }
   }