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