Simplify main dex policies in horizontal class merger

Change-Id: If3c9b939da4c6c0369883546b034aa0320fff708
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
index 5c86a3a..5f74c8d 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
@@ -140,7 +140,6 @@
         new NoIndirectRuntimeTypeChecks(appView, runtimeTypeCheckInfo),
         new PreventMethodImplementation(appView),
         new DontInlinePolicy(appView),
-        new PreventMergeIntoMainDexList(appView),
         new PreventMergeIntoDifferentMainDexGroups(appView),
         new AllInstantiatedOrUninstantiated(appView),
         new SameParentClass(),
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/MultiClassSameReferencePolicy.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/MultiClassSameReferencePolicy.java
index 79db17b..aa3ca62 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/MultiClassSameReferencePolicy.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/MultiClassSameReferencePolicy.java
@@ -26,7 +26,7 @@
 
   public abstract T getMergeKey(DexProgramClass clazz);
 
-  protected final T ineligibleForClassInlining() {
+  protected final T ineligibleForClassMerging() {
     return null;
   }
 }
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/PreventMergeIntoDifferentMainDexGroups.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/PreventMergeIntoDifferentMainDexGroups.java
index 52a1d98..f7b8c6e 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/PreventMergeIntoDifferentMainDexGroups.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/PreventMergeIntoDifferentMainDexGroups.java
@@ -22,7 +22,8 @@
 
   @Override
   public MainDexGroup getMergeKey(DexProgramClass clazz) {
-    assert !mainDexInfo.isFromList(clazz);
-    return mainDexInfo.getMergeKey(clazz);
+    return mainDexInfo.canMerge(clazz)
+        ? mainDexInfo.getMergeKey(clazz)
+        : ineligibleForClassMerging();
   }
 }
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/PreventMergeIntoMainDexList.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/PreventMergeIntoMainDexList.java
deleted file mode 100644
index 850d02e..0000000
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/PreventMergeIntoMainDexList.java
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.horizontalclassmerging.policies;
-
-import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.DexProgramClass;
-import com.android.tools.r8.horizontalclassmerging.SingleClassPolicy;
-import com.android.tools.r8.shaking.AppInfoWithLiveness;
-import com.android.tools.r8.shaking.MainDexInfo;
-
-public class PreventMergeIntoMainDexList extends SingleClassPolicy {
-
-  private final MainDexInfo mainDexInfo;
-
-  public PreventMergeIntoMainDexList(AppView<AppInfoWithLiveness> appView) {
-    this.mainDexInfo = appView.appInfo().getMainDexInfo();
-  }
-
-  @Override
-  public boolean canMerge(DexProgramClass program) {
-    return mainDexInfo.canMerge(program);
-  }
-}
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/SyntheticItemsPolicy.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/SyntheticItemsPolicy.java
index ffc7b34..b012897 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/SyntheticItemsPolicy.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/SyntheticItemsPolicy.java
@@ -37,7 +37,7 @@
     // Do not allow merging synthetics that are not lambdas.
     if (!syntheticItems.isNonLegacySynthetic(clazz)
         || syntheticItems.getNonLegacySyntheticKind(clazz) != SyntheticKind.LAMBDA) {
-      return ineligibleForClassInlining();
+      return ineligibleForClassMerging();
     }
 
     // Allow merging Java lambdas with Java lambdas.
@@ -46,6 +46,6 @@
     }
 
     // Java lambda merging is disabled.
-    return ineligibleForClassInlining();
+    return ineligibleForClassMerging();
   }
 }
diff --git a/src/main/java/com/android/tools/r8/shaking/MainDexInfo.java b/src/main/java/com/android/tools/r8/shaking/MainDexInfo.java
index a60967f..4bb2981 100644
--- a/src/main/java/com/android/tools/r8/shaking/MainDexInfo.java
+++ b/src/main/java/com/android/tools/r8/shaking/MainDexInfo.java
@@ -175,6 +175,7 @@
   }
 
   public MainDexGroup getMergeKey(ProgramDefinition mergeCandidate) {
+    assert canMerge(mergeCandidate);
     MainDexGroup mainDexGroupInternal = getMainDexGroupInternal(mergeCandidate);
     return mainDexGroupInternal == MainDexGroup.MAIN_DEX_LIST ? null : mainDexGroupInternal;
   }