Introduce an isMergeTarget() method on the MergedClasses result

Change-Id: I14915b563c800ef6d43b16528b8b3e542d501aa4
diff --git a/src/main/java/com/android/tools/r8/graph/classmerging/HorizontallyMergedLambdaClasses.java b/src/main/java/com/android/tools/r8/graph/classmerging/HorizontallyMergedLambdaClasses.java
index 89f34d7..3a9f618 100644
--- a/src/main/java/com/android/tools/r8/graph/classmerging/HorizontallyMergedLambdaClasses.java
+++ b/src/main/java/com/android/tools/r8/graph/classmerging/HorizontallyMergedLambdaClasses.java
@@ -42,6 +42,11 @@
   }
 
   @Override
+  public boolean isMergeTarget(DexType type) {
+    return mergedClasses.containsValue(type);
+  }
+
+  @Override
   public boolean verifyAllSourcesPruned(AppView<AppInfoWithLiveness> appView) {
     for (DexType source : mergedClasses.keySet()) {
       assert appView.appInfo().wasPruned(source)
diff --git a/src/main/java/com/android/tools/r8/graph/classmerging/MergedClasses.java b/src/main/java/com/android/tools/r8/graph/classmerging/MergedClasses.java
index 25879f1..ae77e17 100644
--- a/src/main/java/com/android/tools/r8/graph/classmerging/MergedClasses.java
+++ b/src/main/java/com/android/tools/r8/graph/classmerging/MergedClasses.java
@@ -17,6 +17,8 @@
 
   boolean hasBeenMergedIntoDifferentType(DexType type);
 
+  boolean isMergeTarget(DexType type);
+
   boolean verifyAllSourcesPruned(AppView<AppInfoWithLiveness> appView);
 
   /**
diff --git a/src/main/java/com/android/tools/r8/graph/classmerging/MergedClassesCollection.java b/src/main/java/com/android/tools/r8/graph/classmerging/MergedClassesCollection.java
index 5875506..33bee51 100644
--- a/src/main/java/com/android/tools/r8/graph/classmerging/MergedClassesCollection.java
+++ b/src/main/java/com/android/tools/r8/graph/classmerging/MergedClassesCollection.java
@@ -38,6 +38,16 @@
   }
 
   @Override
+  public boolean isMergeTarget(DexType type) {
+    for (MergedClasses mergedClasses : collection) {
+      if (mergedClasses.isMergeTarget(type)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @Override
   public boolean verifyAllSourcesPruned(AppView<AppInfoWithLiveness> appView) {
     for (MergedClasses mergedClasses : collection) {
       assert mergedClasses.verifyAllSourcesPruned(appView);
diff --git a/src/main/java/com/android/tools/r8/graph/classmerging/StaticallyMergedClasses.java b/src/main/java/com/android/tools/r8/graph/classmerging/StaticallyMergedClasses.java
index 0e1dbe5..9aabf18 100644
--- a/src/main/java/com/android/tools/r8/graph/classmerging/StaticallyMergedClasses.java
+++ b/src/main/java/com/android/tools/r8/graph/classmerging/StaticallyMergedClasses.java
@@ -42,6 +42,13 @@
   }
 
   @Override
+  public boolean isMergeTarget(DexType type) {
+    // Intentionally returns false since static class merging technically doesn't merge any classes,
+    // it only moves static members.
+    return false;
+  }
+
+  @Override
   public boolean verifyAllSourcesPruned(AppView<AppInfoWithLiveness> appView) {
     return true;
   }
diff --git a/src/main/java/com/android/tools/r8/graph/classmerging/VerticallyMergedClasses.java b/src/main/java/com/android/tools/r8/graph/classmerging/VerticallyMergedClasses.java
index b9ab790..3b59401 100644
--- a/src/main/java/com/android/tools/r8/graph/classmerging/VerticallyMergedClasses.java
+++ b/src/main/java/com/android/tools/r8/graph/classmerging/VerticallyMergedClasses.java
@@ -56,7 +56,8 @@
     return mergedClasses.isEmpty();
   }
 
-  public boolean isTarget(DexType type) {
+  @Override
+  public boolean isMergeTarget(DexType type) {
     return !getSourcesFor(type).isEmpty();
   }
 
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontallyMergedClasses.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontallyMergedClasses.java
index b9195c3..93f9d3f 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontallyMergedClasses.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontallyMergedClasses.java
@@ -54,6 +54,7 @@
     return mergedClasses.containsKey(type);
   }
 
+  @Override
   public boolean isMergeTarget(DexType type) {
     return mergedClasses.containsValue(type);
   }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java b/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java
index 3745120..cabff87 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java
@@ -344,7 +344,7 @@
     HorizontallyMergedClasses horizontallyMergedClasses = appView.horizontallyMergedClasses();
     assert verticallyMergedClasses != null;
     assert horizontallyMergedClasses != null;
-    assert verticallyMergedClasses.isTarget(method.getHolderType())
+    assert verticallyMergedClasses.isMergeTarget(method.getHolderType())
         || horizontallyMergedClasses.isMergeTarget(method.getHolderType());
     assert appView
         .dexItemFactory()