Disable class merging from base to feature
Bug: 164937965
Change-Id: I44070d310ceb2e3e277ec2fa4d399a5ce06225ab
diff --git a/src/main/java/com/android/tools/r8/features/FeatureSplitConfiguration.java b/src/main/java/com/android/tools/r8/features/FeatureSplitConfiguration.java
index 610104a..74ef8d9 100644
--- a/src/main/java/com/android/tools/r8/features/FeatureSplitConfiguration.java
+++ b/src/main/java/com/android/tools/r8/features/FeatureSplitConfiguration.java
@@ -120,7 +120,7 @@
return !isInFeature(clazz);
}
- public boolean inSameFeatureOrBase(DexMethod a, DexMethod b){
+ public boolean inSameFeatureOrBase(DexMethod a, DexMethod b) {
return inSameFeatureOrBase(a.holder, b.holder);
}
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index 1de617d..682ad54 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -8,6 +8,7 @@
import static com.android.tools.r8.ir.code.Invoke.Type.STATIC;
import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.features.FeatureSplitConfiguration;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.CfCode;
import com.android.tools.r8.graph.Code;
@@ -357,10 +358,14 @@
.map(DexEncodedMember::toReference)
.noneMatch(appInfo::isPinned);
- if (appView.options().featureSplitConfiguration != null
- && appView.options().featureSplitConfiguration.isInFeature(sourceClass)) {
+ FeatureSplitConfiguration featureSplitConfiguration =
+ appView.options().featureSplitConfiguration;
+ if (featureSplitConfiguration != null) {
// TODO(b/141452765): Allow class merging between classes in features.
- return false;
+ if (featureSplitConfiguration.isInFeature(sourceClass)
+ || featureSplitConfiguration.isInFeature(targetClass)) {
+ return false;
+ }
}
if (appView.appServices().allServiceTypes().contains(sourceClass.type)
&& appInfo.isPinned(targetClass.type)) {
diff --git a/src/test/java/com/android/tools/r8/dexsplitter/VerticalClassMergingAcrossFeatureSplitTest.java b/src/test/java/com/android/tools/r8/dexsplitter/VerticalClassMergingAcrossFeatureSplitTest.java
index 67e96ce..4ff8f4b 100644
--- a/src/test/java/com/android/tools/r8/dexsplitter/VerticalClassMergingAcrossFeatureSplitTest.java
+++ b/src/test/java/com/android/tools/r8/dexsplitter/VerticalClassMergingAcrossFeatureSplitTest.java
@@ -5,7 +5,6 @@
package com.android.tools.r8.dexsplitter;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
import com.android.tools.r8.NeverClassInline;
@@ -61,8 +60,7 @@
}
private void inspectBase(CodeInspector inspector) {
- // TODO(b/164937965): BaseClass should stay in base.
- assertThat(inspector.clazz(BaseClass.class), not(isPresent()));
+ assertThat(inspector.clazz(BaseClass.class), isPresent());
}
private void inspectFeature1(CodeInspector inspector) {