Update forEach() methods on DexProgramClass
Change-Id: I5f96591fa9860de0f54b3c08deb1923d2d726b71
diff --git a/src/main/java/com/android/tools/r8/PrintUses.java b/src/main/java/com/android/tools/r8/PrintUses.java
index c753900..9a26221 100644
--- a/src/main/java/com/android/tools/r8/PrintUses.java
+++ b/src/main/java/com/android/tools/r8/PrintUses.java
@@ -294,9 +294,9 @@
for (DexType directInterface : directInterfaces) {
DexProgramClass clazz = asProgramClassOrNull(appInfo.definitionFor(directInterface));
if (clazz != null) {
- clazz.forEachProgramVirtualMethod(
- this::registerMethod,
- definition -> definition.getReference().name.equals(callSite.methodName));
+ clazz.forEachProgramVirtualMethodMatching(
+ definition -> definition.getReference().name.equals(callSite.methodName),
+ this::registerMethod);
}
}
}
diff --git a/src/main/java/com/android/tools/r8/graph/DexProgramClass.java b/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
index 225c208..569fc34 100644
--- a/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
@@ -135,43 +135,43 @@
}
public void forEachProgramMethod(Consumer<ProgramMethod> consumer) {
- forEachProgramMethod(consumer, alwaysTrue());
+ forEachProgramMethodMatching(alwaysTrue(), consumer);
}
- public void forEachProgramMethod(
- Consumer<ProgramMethod> consumer, Predicate<DexEncodedMethod> predicate) {
- methodCollection.forEachMethod(
- method -> consumer.accept(new ProgramMethod(this, method)), predicate);
+ public void forEachProgramMethodMatching(
+ Predicate<DexEncodedMethod> predicate, Consumer<ProgramMethod> consumer) {
+ methodCollection.forEachMethodMatching(
+ predicate, method -> consumer.accept(new ProgramMethod(this, method)));
}
public void forEachProgramMethod(BiConsumer<DexEncodedMethod, ProgramMethod> consumer) {
- forEachProgramMethod(consumer, alwaysTrue());
+ forEachProgramMethodMatching(alwaysTrue(), consumer);
}
- public void forEachProgramMethod(
- BiConsumer<DexEncodedMethod, ProgramMethod> consumer, Predicate<DexEncodedMethod> predicate) {
- methodCollection.forEachMethod(
- method -> consumer.accept(method, new ProgramMethod(this, method)), predicate);
+ public void forEachProgramMethodMatching(
+ Predicate<DexEncodedMethod> predicate, BiConsumer<DexEncodedMethod, ProgramMethod> consumer) {
+ methodCollection.forEachMethodMatching(
+ predicate, method -> consumer.accept(method, new ProgramMethod(this, method)));
}
public void forEachProgramDirectMethod(Consumer<ProgramMethod> consumer) {
- forEachProgramDirectMethod(consumer, alwaysTrue());
+ forEachProgramDirectMethodMatching(alwaysTrue(), consumer);
}
- public void forEachProgramDirectMethod(
- Consumer<ProgramMethod> consumer, Predicate<DexEncodedMethod> predicate) {
- methodCollection.forEachDirectMethod(
- method -> consumer.accept(new ProgramMethod(this, method)), predicate);
+ public void forEachProgramDirectMethodMatching(
+ Predicate<DexEncodedMethod> predicate, Consumer<ProgramMethod> consumer) {
+ methodCollection.forEachDirectMethodMatching(
+ predicate, method -> consumer.accept(new ProgramMethod(this, method)));
}
public void forEachProgramVirtualMethod(Consumer<ProgramMethod> consumer) {
- forEachProgramVirtualMethod(consumer, alwaysTrue());
+ forEachProgramVirtualMethodMatching(alwaysTrue(), consumer);
}
- public void forEachProgramVirtualMethod(
- Consumer<ProgramMethod> consumer, Predicate<DexEncodedMethod> predicate) {
- methodCollection.forEachVirtualMethod(
- method -> consumer.accept(new ProgramMethod(this, method)), predicate);
+ public void forEachProgramVirtualMethodMatching(
+ Predicate<DexEncodedMethod> predicate, Consumer<ProgramMethod> consumer) {
+ methodCollection.forEachVirtualMethodMatching(
+ predicate, method -> consumer.accept(new ProgramMethod(this, method)));
}
public ProgramMethod getProgramClassInitializer() {
diff --git a/src/main/java/com/android/tools/r8/graph/MethodCollection.java b/src/main/java/com/android/tools/r8/graph/MethodCollection.java
index f130908..ac2685a 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodCollection.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodCollection.java
@@ -67,11 +67,11 @@
}
public void forEachMethod(Consumer<DexEncodedMethod> consumer) {
- forEachMethod(consumer, alwaysTrue());
+ forEachMethodMatching(alwaysTrue(), consumer);
}
- public void forEachMethod(
- Consumer<DexEncodedMethod> consumer, Predicate<DexEncodedMethod> predicate) {
+ public void forEachMethodMatching(
+ Predicate<DexEncodedMethod> predicate, Consumer<DexEncodedMethod> consumer) {
backing.forEachMethod(
method -> {
if (predicate.test(method)) {
@@ -81,11 +81,11 @@
}
public void forEachDirectMethod(Consumer<DexEncodedMethod> consumer) {
- forEachDirectMethod(consumer, alwaysTrue());
+ forEachDirectMethodMatching(alwaysTrue(), consumer);
}
- public void forEachDirectMethod(
- Consumer<DexEncodedMethod> consumer, Predicate<DexEncodedMethod> predicate) {
+ public void forEachDirectMethodMatching(
+ Predicate<DexEncodedMethod> predicate, Consumer<DexEncodedMethod> consumer) {
backing.forEachDirectMethod(
method -> {
if (predicate.test(method)) {
@@ -95,11 +95,11 @@
}
public void forEachVirtualMethod(Consumer<DexEncodedMethod> consumer) {
- forEachVirtualMethod(consumer, alwaysTrue());
+ forEachVirtualMethodMatching(alwaysTrue(), consumer);
}
- public void forEachVirtualMethod(
- Consumer<DexEncodedMethod> consumer, Predicate<DexEncodedMethod> predicate) {
+ public void forEachVirtualMethodMatching(
+ Predicate<DexEncodedMethod> predicate, Consumer<DexEncodedMethod> consumer) {
backing.forEachVirtualMethod(
method -> {
if (predicate.test(method)) {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java
index 2bb03e6..1a6a707 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java
@@ -111,9 +111,9 @@
}
private void processClass(DexProgramClass clazz) {
- clazz.forEachProgramMethod(
- method -> method.registerCodeReferences(new TrivialFieldAccessUseRegistry(method)),
- DexEncodedMethod::hasCode);
+ clazz.forEachProgramMethodMatching(
+ DexEncodedMethod::hasCode,
+ method -> method.registerCodeReferences(new TrivialFieldAccessUseRegistry(method)));
}
private static boolean canOptimizeField(
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java
index 28f97d9..4879783 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java
@@ -169,10 +169,10 @@
.forEachInstantiatedSubType(
references.extensionRegistryLiteType,
clazz ->
- clazz.forEachProgramMethod(
- consumer::accept,
+ clazz.forEachProgramMethodMatching(
definition ->
- references.isFindLiteExtensionByNumberMethod(definition.getReference())),
+ references.isFindLiteExtensionByNumberMethod(definition.getReference()),
+ consumer::accept),
lambda -> {
assert false;
});
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilder.java
index e725837..e6f7cb6 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CallGraphBuilder.java
@@ -27,7 +27,7 @@
}
private void processClass(DexProgramClass clazz) {
- clazz.forEachProgramMethod(this::processMethod, DexEncodedMethod::hasCode);
+ clazz.forEachProgramMethodMatching(DexEncodedMethod::hasCode, this::processMethod);
}
private void processMethod(ProgramMethod method) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 2bfe820..2b958c5 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -594,12 +594,12 @@
.setReachabilitySensitive(isReachabilitySensitive);
convertMethod(new ProgramMethod(clazz, classInitializer));
}
- clazz.forEachProgramMethod(
+ clazz.forEachProgramMethodMatching(
+ definition -> !definition.isClassInitializer(),
(definition, method) -> {
definition.getMutableOptimizationInfo().setReachabilitySensitive(isReachabilitySensitive);
convertMethod(method);
- },
- definition -> !definition.isClassInitializer());
+ });
}
private void convertMethod(ProgramMethod method) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/CallSiteOptimizationInfoPropagator.java b/src/main/java/com/android/tools/r8/ir/optimize/CallSiteOptimizationInfoPropagator.java
index b11b0ef..c707738 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/CallSiteOptimizationInfoPropagator.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/CallSiteOptimizationInfoPropagator.java
@@ -327,13 +327,7 @@
mode = Mode.REVISIT;
ProgramMethodSet targetsToRevisit = ProgramMethodSet.create();
for (DexProgramClass clazz : appView.appInfo().classes()) {
- clazz.forEachProgramMethod(
- (definition, method) -> {
- targetsToRevisit.add(method);
- if (appView.options().testing.callSiteOptimizationInfoInspector != null) {
- appView.options().testing.callSiteOptimizationInfoInspector.accept(definition);
- }
- },
+ clazz.forEachProgramMethodMatching(
definition -> {
assert !definition.isObsolete();
if (definition.shouldNotHaveCode()
@@ -345,6 +339,12 @@
CallSiteOptimizationInfo callSiteOptimizationInfo =
definition.getCallSiteOptimizationInfo();
return callSiteOptimizationInfo.hasUsefulOptimizationInfo(appView, definition);
+ },
+ (definition, method) -> {
+ targetsToRevisit.add(method);
+ if (appView.options().testing.callSiteOptimizationInfoInspector != null) {
+ appView.options().testing.callSiteOptimizationInfoInspector.accept(definition);
+ }
});
}
if (revisitedMethods != null) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java b/src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java
index efcf89f..1e95957 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java
@@ -287,15 +287,15 @@
assert previous == null;
// Collect instance methods to be staticized.
- candidateClass.forEachProgramMethod(
- methodsToBeStaticized::add,
+ candidateClass.forEachProgramMethodMatching(
definition -> {
if (!definition.isStatic()) {
removedInstanceMethods.add(definition);
return !definition.isInstanceInitializer();
}
return false;
- });
+ },
+ methodsToBeStaticized::add);
singletonFields.put(candidate.singletonField.field, candidate);
DexEncodedMethod getter = candidate.getter.get();
if (getter != null) {
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 08d06ed..9604389 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -1517,12 +1517,12 @@
private void ensureMethodsContinueToWidenAccess(
DexProgramClass clazz, ScopedDexMethodSet seen, KeepReason reason) {
- clazz.forEachProgramVirtualMethod(
- method -> markMethodAsTargeted(method, reason),
+ clazz.forEachProgramVirtualMethodMatching(
definition ->
seen.addMethodIfMoreVisible(definition)
== AddMethodIfMoreVisibleResult.ADDED_MORE_VISIBLE
- && appView.appInfo().methodDefinedInInterfaces(definition, clazz.type));
+ && appView.appInfo().methodDefinedInInterfaces(definition, clazz.type),
+ method -> markMethodAsTargeted(method, reason));
}
private void markInterfaceTypeAsLiveViaInheritanceClause(
diff --git a/src/main/java/com/android/tools/r8/shaking/MainDexDirectReferenceTracer.java b/src/main/java/com/android/tools/r8/shaking/MainDexDirectReferenceTracer.java
index ac34e73..205cf71 100644
--- a/src/main/java/com/android/tools/r8/shaking/MainDexDirectReferenceTracer.java
+++ b/src/main/java/com/android/tools/r8/shaking/MainDexDirectReferenceTracer.java
@@ -49,12 +49,12 @@
// Super and interfaces are live, no need to add them.
traceAnnotationsDirectDependencies(clazz.annotations());
clazz.forEachField(field -> consumer.accept(field.field.type));
- clazz.forEachProgramMethod(
- method -> method.registerCodeReferences(codeDirectReferenceCollector),
+ clazz.forEachProgramMethodMatching(
definition -> {
traceMethodDirectDependencies(definition.getReference(), consumer);
return definition.hasCode();
- });
+ },
+ method -> method.registerCodeReferences(codeDirectReferenceCollector));
}
}