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()