Encapsulate methods to reprocess set

Change-Id: Ie9b741651b09ea9b2a4e1c8862fe1e6f90625d1b
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/PostMethodProcessor.java b/src/main/java/com/android/tools/r8/ir/conversion/PostMethodProcessor.java
index 6e69b3c..ecee91f 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/PostMethodProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/PostMethodProcessor.java
@@ -73,19 +73,48 @@
       methodsToReprocessBuilder.add(method);
     }
 
-    public LongLivedProgramMethodSetBuilder<ProgramMethodSet> getMethodsToReprocessBuilder() {
-      return methodsToReprocessBuilder;
+    public void add(ProgramMethod method, GraphLens currentGraphLens) {
+      methodsToReprocessBuilder.add(method, currentGraphLens);
+    }
+
+    public void addAll(Collection<ProgramMethod> methods, GraphLens currentGraphLens) {
+      methods.forEach(method -> add(method, currentGraphLens));
+    }
+
+    public boolean contains(ProgramMethod method, GraphLens currentGraphLens) {
+      return methodsToReprocessBuilder.contains(method, currentGraphLens);
+    }
+
+    public PostMethodProcessor.Builder merge(
+        LongLivedProgramMethodSetBuilder<ProgramMethodSet> otherMethodsToReprocessBuilder) {
+      methodsToReprocessBuilder.merge(otherMethodsToReprocessBuilder);
+      return this;
     }
 
     public void put(ProgramMethodSet methodsToRevisit) {
       methodsToRevisit.forEach(this::add);
     }
 
+    public void remove(ProgramMethod method, GraphLens graphLens) {
+      methodsToReprocessBuilder.remove(method.getReference(), graphLens);
+    }
+
+    public PostMethodProcessor.Builder removeAll(Collection<DexMethod> methods) {
+      methodsToReprocessBuilder.removeAll(methods);
+      return this;
+    }
+
     // Some optimizations may change methods, creating new instances of the encoded methods with a
     // new signature. The compiler needs to update the set of methods that must be reprocessed
     // according to the graph lens.
-    public void rewrittenWithLens(AppView<AppInfoWithLiveness> appView) {
+    public PostMethodProcessor.Builder rewrittenWithLens(AppView<AppInfoWithLiveness> appView) {
       methodsToReprocessBuilder.rewrittenWithLens(appView);
+      return this;
+    }
+
+    public PostMethodProcessor.Builder rewrittenWithLens(GraphLens graphLens) {
+      methodsToReprocessBuilder.rewrittenWithLens(graphLens);
+      return this;
     }
 
     PostMethodProcessor build(
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index a658752..26edd76 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -1286,7 +1286,6 @@
       Timing timing)
       throws ExecutionException {
     postMethodProcessorBuilder
-        .getMethodsToReprocessBuilder()
         .rewrittenWithLens(appView)
         .merge(
             singleInlineCallers
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/MultiCallerInliner.java b/src/main/java/com/android/tools/r8/ir/optimize/MultiCallerInliner.java
index afe3547..8312643 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/MultiCallerInliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/MultiCallerInliner.java
@@ -199,7 +199,6 @@
     LongLivedProgramMethodSetBuilder<ProgramMethodSet> multiInlineCallers =
         timing.time("Needs inlining analysis", () -> computeMultiInlineCallerMethods(callGraph));
     postMethodProcessorBuilder
-        .getMethodsToReprocessBuilder()
         .rewrittenWithLens(appView)
         .merge(multiInlineCallers);
     timing.end();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
index 13fc08e..5b1cdfe 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
@@ -667,7 +667,6 @@
     // the builders with the methods removed by the tree fixer (since these methods references are
     // already fully lens rewritten).
     postMethodProcessorBuilder
-        .getMethodsToReprocessBuilder()
         .rewrittenWithLens(appView)
         .removeAll(treeFixerResult.getPrunedItems().getRemovedMethods())
         .merge(
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorMethodReprocessingEnqueuer.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorMethodReprocessingEnqueuer.java
index 6479ad3..42537e8 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorMethodReprocessingEnqueuer.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorMethodReprocessingEnqueuer.java
@@ -23,8 +23,6 @@
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.ThreadUtils;
 import com.android.tools.r8.utils.Timing;
-import com.android.tools.r8.utils.collections.LongLivedProgramMethodSetBuilder;
-import com.android.tools.r8.utils.collections.ProgramMethodSet;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -59,19 +57,16 @@
     // Bring the methods to reprocess set up-to-date with the current graph lens (i.e., the one
     // prior to the argument propagator lens, which has not yet been installed!).
     timing.begin("Rewrite methods to reprocess");
-    LongLivedProgramMethodSetBuilder<ProgramMethodSet> methodsToReprocessBuilder =
-        postMethodProcessorBuilder
-            .getMethodsToReprocessBuilder()
-            .rewrittenWithLens(appView.graphLens());
+    postMethodProcessorBuilder.rewrittenWithLens(appView);
     timing.end();
 
     timing.begin("Enqueue methods with non-trivial info");
-    enqueueAffectedCallees(graphLens, methodsToReprocessBuilder);
+    enqueueAffectedCallees(graphLens, postMethodProcessorBuilder);
     timing.end();
 
     timing.begin("Enqueue affected methods");
     if (graphLens != null) {
-      enqueueAffectedCallers(graphLens, methodsToReprocessBuilder, executorService);
+      enqueueAffectedCallers(graphLens, postMethodProcessorBuilder, executorService);
     }
     timing.end();
 
@@ -80,7 +75,7 @@
 
   private void enqueueAffectedCallees(
       ArgumentPropagatorGraphLens graphLens,
-      LongLivedProgramMethodSetBuilder<ProgramMethodSet> methodsToReprocessBuilder) {
+      PostMethodProcessor.Builder postMethodProcessorBuilder) {
     GraphLens currentGraphLens = appView.graphLens();
     for (DexProgramClass clazz : appView.appInfo().classes()) {
       clazz.forEachProgramMethodMatching(
@@ -95,7 +90,7 @@
                   graphLens.internalGetNextMethodSignature(method.getReference());
               if (graphLens.hasPrototypeChanges(rewrittenMethodSignature)) {
                 assert !appView.appInfo().isNeverReprocessMethod(method);
-                methodsToReprocessBuilder.add(method, currentGraphLens);
+                postMethodProcessorBuilder.add(method, currentGraphLens);
                 appView.testing().callSiteOptimizationInfoInspector.accept(method);
                 return;
               }
@@ -107,7 +102,7 @@
                     .getReprocessingCriteria(method)
                     .shouldReprocess(appView, method, callSiteOptimizationInfo)
                 && !appView.appInfo().isNeverReprocessMethod(method)) {
-              methodsToReprocessBuilder.add(method, currentGraphLens);
+              postMethodProcessorBuilder.add(method, currentGraphLens);
               appView.testing().callSiteOptimizationInfoInspector.accept(method);
             }
           });
@@ -119,7 +114,7 @@
   //  methods as unoptimizable prior to removing parameters from the application.
   private void enqueueAffectedCallers(
       ArgumentPropagatorGraphLens graphLens,
-      LongLivedProgramMethodSetBuilder<ProgramMethodSet> methodsToReprocessBuilder,
+      PostMethodProcessor.Builder postMethodProcessorBuilder,
       ExecutorService executorService)
       throws ExecutionException {
     GraphLens currentGraphLens = appView.graphLens();
@@ -131,7 +126,7 @@
               clazz.forEachProgramMethodMatching(
                   DexEncodedMethod::hasCode,
                   method -> {
-                    if (!methodsToReprocessBuilder.contains(method, currentGraphLens)) {
+                    if (!postMethodProcessorBuilder.contains(method, currentGraphLens)) {
                       AffectedMethodUseRegistry registry =
                           new AffectedMethodUseRegistry(appView, method, graphLens);
                       if (method.registerCodeReferencesWithResult(registry)) {
@@ -145,7 +140,7 @@
             executorService);
     methodsToReprocess.forEach(
         methodsToReprocessInClass ->
-            methodsToReprocessBuilder.addAll(methodsToReprocessInClass, currentGraphLens));
+            postMethodProcessorBuilder.addAll(methodsToReprocessInClass, currentGraphLens));
   }
 
   static class AffectedMethodUseRegistry extends UseRegistryWithResult<Boolean, ProgramMethod> {