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));
}
}