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