Disallow class inlining for -if preconditions
Change-Id: Icddb5ba8897657f214962214f67cf5ea3d95171f
diff --git a/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java b/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
index 8702348..1410247 100644
--- a/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
+++ b/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
@@ -337,6 +337,12 @@
rootSetBuilder.runPerRule(tasks, neverClassInlineRuleForCondition, null);
}
+ InlineRule neverInlineForClassInliningRuleForCondition =
+ materializedRule.neverInlineRuleForCondition(dexItemFactory, Type.NEVER_CLASS_INLINE);
+ if (neverInlineForClassInliningRuleForCondition != null) {
+ rootSetBuilder.runPerRule(tasks, neverInlineForClassInliningRuleForCondition, null);
+ }
+
// If the condition of the -if rule has any members, then we need to keep these members to
// ensure that the subsequent rule will be applied again in the second round of tree
// shaking.
diff --git a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
index faba9a5..fe52d26 100644
--- a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
@@ -274,7 +274,7 @@
.apply(this::suppressZipFileAssignmentsToJavaLangAutoCloseable)
.compile()
.graphInspector();
- assertRetainedClassesEqual(referenceInspector, ifHasMemberThenKeepClassInspector, true, true);
+ assertRetainedClassesEqual(referenceInspector, ifHasMemberThenKeepClassInspector);
}
private void configureHorizontalClassMerging(R8FullTestBuilder testBuilder) {
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedParameterTypeTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedParameterTypeTest.java
index 01f8190..aa46e96 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedParameterTypeTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedParameterTypeTest.java
@@ -4,9 +4,9 @@
package com.android.tools.r8.shaking.ifrule.verticalclassmerging;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
@@ -114,7 +114,7 @@
if (enableVerticalClassMerging) {
// Verify that SuperTestClass has been merged into TestClass.
- assertThat(inspector.clazz(SuperTestClass.class), not(isPresent()));
+ assertThat(inspector.clazz(SuperTestClass.class), isAbsent());
assertEquals(
"java.lang.Object", testClassSubject.getDexProgramClass().superType.toSourceString());
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedTypeBaseTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedTypeBaseTest.java
index ed578cd..9f7bb91 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedTypeBaseTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedTypeBaseTest.java
@@ -4,9 +4,9 @@
package com.android.tools.r8.shaking.ifrule.verticalclassmerging;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.NoAccessModification;
@@ -97,8 +97,8 @@
// Verify that A and I are no longer present when vertical class merging is enabled.
if (enableVerticalClassMerging) {
- assertThat(inspector.clazz(A.class), not(isPresent()));
- assertThat(inspector.clazz(I.class), not(isPresent()));
+ assertThat(inspector.clazz(A.class), isAbsent());
+ assertThat(inspector.clazz(I.class), isAbsent());
}
}