Cleanup vertical class merger policies

Change-Id: I888106849865ddcbbd85ac82dc906a2fb5482f15
diff --git a/src/main/java/com/android/tools/r8/classmerging/Policy.java b/src/main/java/com/android/tools/r8/classmerging/Policy.java
index e7f52f3..7655762 100644
--- a/src/main/java/com/android/tools/r8/classmerging/Policy.java
+++ b/src/main/java/com/android/tools/r8/classmerging/Policy.java
@@ -8,7 +8,6 @@
 import com.android.tools.r8.horizontalclassmerging.MultiClassPolicy;
 import com.android.tools.r8.horizontalclassmerging.MultiClassPolicyWithPreprocessing;
 import com.android.tools.r8.horizontalclassmerging.SingleClassPolicy;
-import com.android.tools.r8.verticalclassmerging.policies.VerticalClassMergerPolicy;
 import com.android.tools.r8.verticalclassmerging.policies.VerticalClassMergerPolicyWithPreprocessing;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -60,16 +59,7 @@
     return false;
   }
 
-  public VerticalClassMergerPolicy asVerticalClassMergerPolicy() {
-    return null;
-  }
-
-  public boolean isVerticalClassMergerPolicyWithPreprocessing() {
-    return false;
-  }
-
-  public VerticalClassMergerPolicyWithPreprocessing<?>
-      asVerticalClassMergerPolicyWithPreprocessing() {
+  public VerticalClassMergerPolicyWithPreprocessing<?> asVerticalClassMergerPolicy() {
     return null;
   }
 
diff --git a/src/main/java/com/android/tools/r8/verticalclassmerging/VerticalClassMergerPolicyExecutor.java b/src/main/java/com/android/tools/r8/verticalclassmerging/VerticalClassMergerPolicyExecutor.java
index bab7656..1874199 100644
--- a/src/main/java/com/android/tools/r8/verticalclassmerging/VerticalClassMergerPolicyExecutor.java
+++ b/src/main/java/com/android/tools/r8/verticalclassmerging/VerticalClassMergerPolicyExecutor.java
@@ -35,7 +35,6 @@
 import com.android.tools.r8.verticalclassmerging.policies.SameNestPolicy;
 import com.android.tools.r8.verticalclassmerging.policies.SameStartupPartitionPolicy;
 import com.android.tools.r8.verticalclassmerging.policies.SuccessfulVirtualMethodResolutionInTargetPolicy;
-import com.android.tools.r8.verticalclassmerging.policies.VerticalClassMergerPolicy;
 import com.android.tools.r8.verticalclassmerging.policies.VerticalClassMergerPolicyWithPreprocessing;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -113,18 +112,8 @@
   protected LinkedList<VerticalMergeGroup> apply(
       Policy policy, LinkedList<VerticalMergeGroup> linkedGroups, ExecutorService executorService)
       throws ExecutionException {
-    if (policy.isVerticalClassMergerPolicy()) {
-      return apply(policy.asVerticalClassMergerPolicy(), linkedGroups);
-    } else {
-      assert policy.isVerticalClassMergerPolicyWithPreprocessing();
-      return apply(policy.asVerticalClassMergerPolicyWithPreprocessing(), linkedGroups);
-    }
-  }
-
-  private LinkedList<VerticalMergeGroup> apply(
-      VerticalClassMergerPolicy policy, LinkedList<VerticalMergeGroup> linkedGroups) {
-    linkedGroups.removeIf(group -> !policy.canMerge(group));
-    return linkedGroups;
+    assert policy.isVerticalClassMergerPolicy();
+    return apply(policy.asVerticalClassMergerPolicy(), linkedGroups);
   }
 
   private <T> LinkedList<VerticalMergeGroup> apply(
diff --git a/src/main/java/com/android/tools/r8/verticalclassmerging/policies/VerticalClassMergerPolicy.java b/src/main/java/com/android/tools/r8/verticalclassmerging/policies/VerticalClassMergerPolicy.java
index 49f179f..b5a6390 100644
--- a/src/main/java/com/android/tools/r8/verticalclassmerging/policies/VerticalClassMergerPolicy.java
+++ b/src/main/java/com/android/tools/r8/verticalclassmerging/policies/VerticalClassMergerPolicy.java
@@ -3,20 +3,21 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.verticalclassmerging.policies;
 
-import com.android.tools.r8.classmerging.Policy;
 import com.android.tools.r8.verticalclassmerging.VerticalMergeGroup;
+import java.util.Collection;
 
-public abstract class VerticalClassMergerPolicy extends Policy {
+public abstract class VerticalClassMergerPolicy
+    extends VerticalClassMergerPolicyWithPreprocessing<Void> {
 
   public abstract boolean canMerge(VerticalMergeGroup group);
 
   @Override
-  public boolean isVerticalClassMergerPolicy() {
-    return true;
+  public final boolean canMerge(VerticalMergeGroup group, Void data) {
+    return canMerge(group);
   }
 
   @Override
-  public VerticalClassMergerPolicy asVerticalClassMergerPolicy() {
-    return this;
+  public final Void preprocess(Collection<VerticalMergeGroup> groups) {
+    return null;
   }
 }
diff --git a/src/main/java/com/android/tools/r8/verticalclassmerging/policies/VerticalClassMergerPolicyWithPreprocessing.java b/src/main/java/com/android/tools/r8/verticalclassmerging/policies/VerticalClassMergerPolicyWithPreprocessing.java
index 7737ebc..5efbe75 100644
--- a/src/main/java/com/android/tools/r8/verticalclassmerging/policies/VerticalClassMergerPolicyWithPreprocessing.java
+++ b/src/main/java/com/android/tools/r8/verticalclassmerging/policies/VerticalClassMergerPolicyWithPreprocessing.java
@@ -14,13 +14,12 @@
   public abstract T preprocess(Collection<VerticalMergeGroup> groups);
 
   @Override
-  public boolean isVerticalClassMergerPolicyWithPreprocessing() {
+  public boolean isVerticalClassMergerPolicy() {
     return true;
   }
 
   @Override
-  public VerticalClassMergerPolicyWithPreprocessing<T>
-      asVerticalClassMergerPolicyWithPreprocessing() {
+  public VerticalClassMergerPolicyWithPreprocessing<T> asVerticalClassMergerPolicy() {
     return this;
   }
 }