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