Introduce a utility to filter redundant TestParameters for R8 tests

Bug: b/267266483
Change-Id: I25fcc11b10b5b7d0866a8c0f22fc2bd31fb54fb8
diff --git a/src/test/java/com/android/tools/r8/TestParameters.java b/src/test/java/com/android/tools/r8/TestParameters.java
index 2c07c38..616d3c7 100644
--- a/src/test/java/com/android/tools/r8/TestParameters.java
+++ b/src/test/java/com/android/tools/r8/TestParameters.java
@@ -5,6 +5,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.TestBase.Backend;
 import com.android.tools.r8.TestRuntime.CfRuntime;
@@ -20,15 +21,22 @@
 
   private final TestRuntime runtime;
   private final AndroidApiLevel apiLevel;
+  private final boolean representativeApiLevelForRuntime;
 
   public TestParameters(TestRuntime runtime) {
     this(runtime, null);
   }
 
   public TestParameters(TestRuntime runtime, AndroidApiLevel apiLevel) {
+    this(runtime, apiLevel, true);
+  }
+
+  public TestParameters(
+      TestRuntime runtime, AndroidApiLevel apiLevel, boolean representativeApiLevelForRuntime) {
     assert runtime != null;
     this.runtime = runtime;
     this.apiLevel = apiLevel;
+    this.representativeApiLevelForRuntime = representativeApiLevelForRuntime;
   }
 
   public static TestParametersBuilder builder() {
@@ -157,6 +165,11 @@
     assertEquals(NoneRuntime.getInstance(), runtime);
   }
 
+  public void assumeR8TestParameters() {
+    assertTrue(apiLevel != null || representativeApiLevelForRuntime);
+    assumeTrue(isDexRuntime() || representativeApiLevelForRuntime);
+  }
+
   public DexVm.Version getDexRuntimeVersion() {
     assertTrue(isDexRuntime());
     return getRuntime().asDex().getVm().getVersion();
diff --git a/src/test/java/com/android/tools/r8/TestParametersBuilder.java b/src/test/java/com/android/tools/r8/TestParametersBuilder.java
index c62a34c..bb1aad8 100644
--- a/src/test/java/com/android/tools/r8/TestParametersBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestParametersBuilder.java
@@ -9,6 +9,7 @@
 import com.android.tools.r8.TestRuntime.NoneRuntime;
 import com.android.tools.r8.ToolHelper.DexVm;
 import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.BooleanBox;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.LinkedHashMap;
@@ -312,7 +313,15 @@
               set.add(explicitApiLevel);
             }
           }
-          return set.stream().map(api -> new TestParameters(runtime, api));
+          BooleanBox representativeApiLevelForRuntime = new BooleanBox(true);
+          return set.stream()
+              .map(
+                  api -> {
+                    TestParameters parameters =
+                        new TestParameters(runtime, api, representativeApiLevelForRuntime.get());
+                    representativeApiLevelForRuntime.unset();
+                    return parameters;
+                  });
         }
       }
     }
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/BasicConstantDynamicTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/BasicConstantDynamicTest.java
index c5c6480..e5a75ed 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/BasicConstantDynamicTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/BasicConstantDynamicTest.java
@@ -73,7 +73,7 @@
 
   @Test
   public void testR8() throws Exception {
-    assumeTrue(parameters.isDexRuntime() || parameters.getApiLevel().isEqualTo(AndroidApiLevel.B));
+    parameters.assumeR8TestParameters();
 
     testForR8(parameters.getBackend())
         .addProgramClassFileData(getTransformedClasses())
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/BootstrapMethodNotFoundConstantDynamicTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/BootstrapMethodNotFoundConstantDynamicTest.java
index 4cea83c..3abcc88 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/BootstrapMethodNotFoundConstantDynamicTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/BootstrapMethodNotFoundConstantDynamicTest.java
@@ -71,7 +71,7 @@
 
   @Test
   public void testR8() throws Exception {
-    assumeTrue(parameters.isDexRuntime() || parameters.getApiLevel().isEqualTo(AndroidApiLevel.B));
+    parameters.assumeR8TestParameters();
 
     testForR8(parameters.getBackend())
         .addProgramClassFileData(getTransformedClasses())
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/BootstrapMethodPrivateConstantDynamicTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/BootstrapMethodPrivateConstantDynamicTest.java
index 169a85d..a8fc8ce 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/BootstrapMethodPrivateConstantDynamicTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/BootstrapMethodPrivateConstantDynamicTest.java
@@ -70,7 +70,7 @@
 
   @Test
   public void testR8() throws Exception {
-    assumeTrue(parameters.isDexRuntime() || parameters.getApiLevel().isEqualTo(AndroidApiLevel.B));
+    parameters.assumeR8TestParameters();
 
     testForR8(parameters.getBackend())
         .addProgramClassFileData(getTransformedClasses())
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/BootstrapMethodVirtualConstantDynamicTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/BootstrapMethodVirtualConstantDynamicTest.java
index a693c21..d024c12 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/BootstrapMethodVirtualConstantDynamicTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/BootstrapMethodVirtualConstantDynamicTest.java
@@ -70,7 +70,7 @@
 
   @Test
   public void testR8() throws Exception {
-    assumeTrue(parameters.isDexRuntime() || parameters.getApiLevel().isEqualTo(AndroidApiLevel.B));
+    parameters.assumeR8TestParameters();
 
     testForR8(parameters.getBackend())
         .addProgramClassFileData(getTransformedClasses())
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicInDefaultInterfaceMethodICCETest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicInDefaultInterfaceMethodICCETest.java
index feff719..b9bbf85 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicInDefaultInterfaceMethodICCETest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicInDefaultInterfaceMethodICCETest.java
@@ -73,7 +73,7 @@
 
   @Test
   public void testR8() throws Exception {
-    assumeTrue(parameters.isDexRuntime() || parameters.getApiLevel().isEqualTo(AndroidApiLevel.B));
+    parameters.assumeR8TestParameters();
 
     testForR8(parameters.getBackend())
         .addProgramClasses(MAIN_CLASS)
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicInDefaultInterfaceMethodTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicInDefaultInterfaceMethodTest.java
index ad46d90..d4a92e0 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicInDefaultInterfaceMethodTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicInDefaultInterfaceMethodTest.java
@@ -74,7 +74,7 @@
 
   @Test
   public void testR8() throws Exception {
-    assumeTrue(parameters.isDexRuntime() || parameters.getApiLevel().isEqualTo(AndroidApiLevel.B));
+    parameters.assumeR8TestParameters();
 
     testForR8(parameters.getBackend())
         .addProgramClasses(MAIN_CLASS)
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/HierarchyConstantDynamicTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/HierarchyConstantDynamicTest.java
index b7e540b..695ddd5 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/HierarchyConstantDynamicTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/HierarchyConstantDynamicTest.java
@@ -65,7 +65,7 @@
 
   @Test
   public void testR8() throws Exception {
-    assumeTrue(parameters.isDexRuntime() || parameters.getApiLevel().isEqualTo(AndroidApiLevel.B));
+    parameters.assumeR8TestParameters();
 
     testForR8(parameters.getBackend())
         .addProgramClassFileData(getTransformedClasses())
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/MultipleBootstrapMethodConstantDynamicTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/MultipleBootstrapMethodConstantDynamicTest.java
index a7df375..b052264 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/MultipleBootstrapMethodConstantDynamicTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/MultipleBootstrapMethodConstantDynamicTest.java
@@ -74,7 +74,7 @@
 
   @Test
   public void testR8() throws Exception {
-    assumeTrue(parameters.isDexRuntime() || parameters.getApiLevel().isEqualTo(AndroidApiLevel.B));
+    parameters.assumeR8TestParameters();
 
     testForR8(parameters.getBackend())
         .addProgramClassFileData(getTransformedClasses())