Parameterize tests for class merging after constructor shrinking
Change-Id: I15bc2b3bd3d81a90e30559e9a9ef815a369fd9f7
diff --git a/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemovalOptions.java b/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemovalOptions.java
index a902764..df58e45 100644
--- a/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemovalOptions.java
+++ b/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemovalOptions.java
@@ -16,6 +16,7 @@
private final InternalOptions options;
+ private boolean enableRetargetingOfConstructorBridgeCalls = false;
private Set<DexType> noConstructorShrinkingHierarchies;
public RedundantBridgeRemovalOptions(InternalOptions options) {
@@ -39,4 +40,13 @@
public boolean isPlatformReflectingOnDefaultConstructorInSubclasses(DexLibraryClass clazz) {
return noConstructorShrinkingHierarchies.contains(clazz.getType());
}
+
+ public boolean isRetargetingOfConstructorBridgeCallsEnabled() {
+ return enableRetargetingOfConstructorBridgeCalls;
+ }
+
+ public void setEnableRetargetingOfConstructorBridgeCalls(
+ boolean enableRetargetingOfConstructorBridgeCalls) {
+ this.enableRetargetingOfConstructorBridgeCalls = enableRetargetingOfConstructorBridgeCalls;
+ }
}
diff --git a/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemover.java b/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemover.java
index c050859..49b5d17 100644
--- a/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemover.java
+++ b/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemover.java
@@ -175,7 +175,7 @@
// TODO(b/245882297): Refine these visibility checks so that we also rewrite when
// the target is not public, but still accessible to call sites.
boolean isEligibleForRetargeting =
- appView.testing().enableRetargetingConstructorBridgeCalls
+ redundantBridgeRemovalOptions.isRetargetingOfConstructorBridgeCallsEnabled()
|| !method.getDefinition().isInstanceInitializer();
if (isEligibleForRetargeting
&& target.getAccessFlags().isPublic()
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index efe99d8..f48a387 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -2148,7 +2148,6 @@
public boolean enableDeadSwitchCaseElimination = true;
public boolean enableInvokeSuperToInvokeVirtualRewriting = true;
public boolean enableMultiANewArrayDesugaringForClassFiles = false;
- public boolean enableRetargetingConstructorBridgeCalls = false;
public boolean enableSyntheticSharing = true;
public boolean enableSwitchToIfRewriting = true;
public boolean enableEnumUnboxingDebugLogs =
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/HorizontalClassMergingAfterConstructorShrinkingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/HorizontalClassMergingAfterConstructorShrinkingTest.java
index 3be01dd..4283b1a 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/HorizontalClassMergingAfterConstructorShrinkingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/HorizontalClassMergingAfterConstructorShrinkingTest.java
@@ -10,10 +10,10 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.HorizontallyMergedClassesInspector;
-import org.junit.Assume;
+import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -24,14 +24,19 @@
public class HorizontalClassMergingAfterConstructorShrinkingTest extends TestBase {
@Parameter(0)
+ public boolean enableRetargetingOfConstructorBridgeCalls;
+
+ @Parameter(1)
public TestParameters parameters;
- @Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters()
- .withDexRuntimes()
- .withApiLevelsStartingAtIncluding(AndroidApiLevel.L)
- .build();
+ @Parameters(name = "{1}, retarget: {0}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ BooleanUtils.values(),
+ getTestParameters()
+ .withDexRuntimes()
+ .withApiLevelsStartingAtIncluding(AndroidApiLevel.L)
+ .build());
}
@Test
@@ -41,6 +46,12 @@
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
.addOptionsModification(
+ options ->
+ options
+ .getRedundantBridgeRemovalOptions()
+ .setEnableRetargetingOfConstructorBridgeCalls(
+ enableRetargetingOfConstructorBridgeCalls))
+ .addOptionsModification(
options -> options.horizontalClassMergerOptions().disableInitialRoundOfClassMerging())
.addHorizontallyMergedClassesInspector(
HorizontallyMergedClassesInspector::assertNoClassesMerged)
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/HorizontalClassMergingAfterConstructorShrinkingWithRepackagingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/HorizontalClassMergingAfterConstructorShrinkingWithRepackagingTest.java
index 578c482..e705e0c 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/HorizontalClassMergingAfterConstructorShrinkingWithRepackagingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/HorizontalClassMergingAfterConstructorShrinkingWithRepackagingTest.java
@@ -15,12 +15,13 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.FoundMethodSubject;
import com.android.tools.r8.utils.codeinspector.HorizontallyMergedClassesInspector;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
+import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -36,14 +37,19 @@
public class HorizontalClassMergingAfterConstructorShrinkingWithRepackagingTest extends TestBase {
@Parameter(0)
+ public boolean enableRetargetingOfConstructorBridgeCalls;
+
+ @Parameter(1)
public TestParameters parameters;
- @Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters()
- .withDexRuntimes()
- .withApiLevelsStartingAtIncluding(AndroidApiLevel.L)
- .build();
+ @Parameters(name = "{1}, retarget: {0}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ BooleanUtils.values(),
+ getTestParameters()
+ .withDexRuntimes()
+ .withApiLevelsStartingAtIncluding(AndroidApiLevel.L)
+ .build());
}
@Test
@@ -54,6 +60,12 @@
.addKeepMainRule(Main.class)
.addKeepRules("-repackageclasses")
.addOptionsModification(
+ options ->
+ options
+ .getRedundantBridgeRemovalOptions()
+ .setEnableRetargetingOfConstructorBridgeCalls(
+ enableRetargetingOfConstructorBridgeCalls))
+ .addOptionsModification(
options -> options.horizontalClassMergerOptions().disableInitialRoundOfClassMerging())
.addHorizontallyMergedClassesInspector(
HorizontallyMergedClassesInspector::assertNoClassesMerged)
diff --git a/src/test/java/com/android/tools/r8/shaking/RetainIndirectlyReferencedConstructorShakingOnDexTest.java b/src/test/java/com/android/tools/r8/shaking/RetainIndirectlyReferencedConstructorShakingOnDexTest.java
index a19fd93..f44de8c 100644
--- a/src/test/java/com/android/tools/r8/shaking/RetainIndirectlyReferencedConstructorShakingOnDexTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/RetainIndirectlyReferencedConstructorShakingOnDexTest.java
@@ -30,7 +30,7 @@
public class RetainIndirectlyReferencedConstructorShakingOnDexTest extends TestBase {
@Parameter(0)
- public boolean enableRetargetingConstructorBridgeCalls;
+ public boolean enableRetargetingOfConstructorBridgeCalls;
@Parameter(1)
public TestParameters parameters;
@@ -48,8 +48,10 @@
.addKeepMainRule(Main.class)
.addOptionsModification(
options ->
- options.testing.enableRetargetingConstructorBridgeCalls =
- enableRetargetingConstructorBridgeCalls)
+ options
+ .getRedundantBridgeRemovalOptions()
+ .setEnableRetargetingOfConstructorBridgeCalls(
+ enableRetargetingOfConstructorBridgeCalls))
.enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters)
.compile()
@@ -80,7 +82,7 @@
invokesMethod(
MethodReferenceUtils.instanceConstructor(
parameters.canHaveNonReboundConstructorInvoke()
- && enableRetargetingConstructorBridgeCalls
+ && enableRetargetingOfConstructorBridgeCalls
? Reference.classFromDescriptor(aClassSubject.getFinalDescriptor())
: Reference.classFromDescriptor(bClassSubject.getFinalDescriptor()))));
}