Add testing annotations as program input to tests

This will be needed to avoid missing classes warnings with the new missing class reporting.

Change-Id: Ia6940acc198e908abdb43197014e6db8e3f602eb
diff --git a/src/test/java/com/android/tools/r8/NeverInline.java b/src/test/java/com/android/tools/r8/NeverInline.java
index ca0c2a4..cfbb09f 100644
--- a/src/test/java/com/android/tools/r8/NeverInline.java
+++ b/src/test/java/com/android/tools/r8/NeverInline.java
@@ -4,7 +4,10 @@
 package com.android.tools.r8;
 
 import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+@Retention(RetentionPolicy.CLASS)
 @Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
 public @interface NeverInline {}
diff --git a/src/test/java/com/android/tools/r8/R8TestBuilder.java b/src/test/java/com/android/tools/r8/R8TestBuilder.java
index 34d573a..c45de1f 100644
--- a/src/test/java/com/android/tools/r8/R8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/R8TestBuilder.java
@@ -57,21 +57,6 @@
 
   private AllowedDiagnosticMessages allowedDiagnosticMessages = AllowedDiagnosticMessages.NONE;
   private boolean allowUnusedProguardConfigurationRules = false;
-  private boolean enableAssumeNoSideEffectsAnnotations = false;
-  private boolean enableConstantArgumentAnnotations = false;
-  private boolean enableInliningAnnotations = false;
-  private boolean enableMemberValuePropagationAnnotations = false;
-  private boolean enableNoUnusedInterfaceRemovalAnnotations = false;
-  private boolean enableNoVerticalClassMergingAnnotations = false;
-  private boolean enableNoHorizontalClassMergingAnnotations = false;
-  private boolean enableNoStaticClassMergingAnnotations = false;
-  private boolean enableNeverClassInliningAnnotations = false;
-  private boolean enableNeverReprocessClassInitializerAnnotations = false;
-  private boolean enableNeverReprocessMethodAnnotations = false;
-  private boolean enableReprocessClassInitializerAnnotations = false;
-  private boolean enableReprocessMethodAnnotations = false;
-  private boolean enableSideEffectAnnotations = false;
-  private boolean enableUnusedArgumentAnnotations = false;
   private CollectingGraphConsumer graphConsumer = null;
   private List<String> keepRules = new ArrayList<>();
   private List<Path> mainDexRulesFiles = new ArrayList<>();
@@ -82,22 +67,6 @@
   R8TestCompileResult internalCompile(
       Builder builder, Consumer<InternalOptions> optionsConsumer, Supplier<AndroidApp> app)
       throws CompilationFailedException {
-    if (enableConstantArgumentAnnotations
-        || enableInliningAnnotations
-        || enableMemberValuePropagationAnnotations
-        || enableNoUnusedInterfaceRemovalAnnotations
-        || enableNoVerticalClassMergingAnnotations
-        || enableNoHorizontalClassMergingAnnotations
-        || enableNoStaticClassMergingAnnotations
-        || enableNeverClassInliningAnnotations
-        || enableNeverReprocessClassInitializerAnnotations
-        || enableNeverReprocessMethodAnnotations
-        || enableReprocessClassInitializerAnnotations
-        || enableReprocessMethodAnnotations
-        || enableSideEffectAnnotations
-        || enableUnusedArgumentAnnotations) {
-      ToolHelper.allowTestProguardOptions(builder);
-    }
     if (!keepRules.isEmpty()) {
       builder.addProguardConfiguration(keepRules, Origin.unknown());
     }
@@ -357,75 +326,54 @@
   }
 
   public T enableAlwaysInliningAnnotations() {
-    return enableAlwaysInliningAnnotations(AlwaysInline.class.getPackage().getName());
+    return addAlwaysInliningAnnotations()
+        .enableAlwaysInliningAnnotations(AlwaysInline.class.getPackage().getName());
   }
 
   public T enableAlwaysInliningAnnotations(String annotationPackageName) {
-    if (!enableInliningAnnotations) {
-      enableInliningAnnotations = true;
-      addInternalKeepRules(
-          "-alwaysinline class * { @" + annotationPackageName + ".AlwaysInline *; }");
-    }
-    return self();
+    return addInternalKeepRules(
+        "-alwaysinline class * { @" + annotationPackageName + ".AlwaysInline *; }");
   }
 
   public T enableAssumeNoSideEffectsAnnotations() {
-    return enableAssumeNoSideEffectsAnnotations(AssumeNoSideEffects.class.getPackage().getName());
+    return addAssumeNoSideEffectsAnnotations()
+        .enableAssumeNoSideEffectsAnnotations(AssumeNoSideEffects.class.getPackage().getName());
   }
 
   public T enableAssumeNoSideEffectsAnnotations(String annotationPackageName) {
-    if (!enableAssumeNoSideEffectsAnnotations) {
-      enableAssumeNoSideEffectsAnnotations = true;
-      addInternalKeepRules(
-          "-assumenosideeffects class * { @"
-              + annotationPackageName
-              + ".AssumeNoSideEffects <methods>; }");
-    }
-    return self();
+    return addInternalKeepRules(
+        "-assumenosideeffects class * { @"
+            + annotationPackageName
+            + ".AssumeNoSideEffects <methods>; }");
   }
 
   public T enableInliningAnnotations() {
-    return enableInliningAnnotations(NeverInline.class.getPackage().getName());
+    return addInliningAnnotations()
+        .enableInliningAnnotations(NeverInline.class.getPackage().getName());
   }
 
   public T enableInliningAnnotations(String annotationPackageName) {
-    if (!enableInliningAnnotations) {
-      enableInliningAnnotations = true;
-      addInternalKeepRules(
-          "-neverinline class * { @" + annotationPackageName + ".NeverInline *; }");
-    }
-    return self();
+    return addInternalKeepRules(
+        "-neverinline class * { @" + annotationPackageName + ".NeverInline *; }");
   }
 
   public T enableForceInliningAnnotations() {
-    return enableForceInliningAnnotations(ForceInline.class.getPackage().getName());
+    return addForceInliningAnnotations()
+        .enableForceInliningAnnotations(ForceInline.class.getPackage().getName());
   }
 
   public T enableForceInliningAnnotations(String annotationPackageName) {
-    if (!enableInliningAnnotations) {
-      enableInliningAnnotations = true;
-      addInternalKeepRules(
-          "-forceinline class * { @" + annotationPackageName + ".ForceInline *; }");
-    }
-    return self();
+    return addInternalKeepRules(
+        "-forceinline class * { @" + annotationPackageName + ".ForceInline *; }");
   }
 
   public T enableNeverClassInliningAnnotations() {
-    if (!enableNeverClassInliningAnnotations) {
-      enableNeverClassInliningAnnotations = true;
-      addInternalKeepRules("-neverclassinline @com.android.tools.r8.NeverClassInline class *");
-    }
-    return self();
+    return addNeverClassInliningAnnotations()
+        .addInternalKeepRules("-neverclassinline @com.android.tools.r8.NeverClassInline class *");
   }
 
-  private void addInternalMatchInterfaceRule(String name, Class matchInterface) {
-    StringBuilder sb = new StringBuilder();
-    sb.append("-");
-    sb.append(name);
-    sb.append(" @");
-    sb.append(matchInterface.getTypeName());
-    sb.append(" class *");
-    addInternalKeepRules(sb.toString());
+  T addInternalMatchInterfaceRule(String name, Class<?> matchInterface) {
+    return addInternalKeepRules("-" + name + " @" + matchInterface.getTypeName() + " class *");
   }
 
   public T noClassInlining() {
@@ -467,42 +415,31 @@
   }
 
   public T enableNoUnusedInterfaceRemovalAnnotations() {
-    if (!enableNoUnusedInterfaceRemovalAnnotations) {
-      enableNoUnusedInterfaceRemovalAnnotations = true;
-      addInternalMatchInterfaceRule(
-          NoUnusedInterfaceRemovalRule.RULE_NAME, NoUnusedInterfaceRemoval.class);
-    }
-    return self();
+    return addNoUnusedInterfaceRemovalAnnotations()
+        .addInternalMatchInterfaceRule(
+            NoUnusedInterfaceRemovalRule.RULE_NAME, NoUnusedInterfaceRemoval.class);
   }
 
   public T enableNoVerticalClassMergingAnnotations() {
-    if (!enableNoVerticalClassMergingAnnotations) {
-      enableNoVerticalClassMergingAnnotations = true;
-      addInternalMatchInterfaceRule(
-          NoVerticalClassMergingRule.RULE_NAME, NoVerticalClassMerging.class);
-    }
-    return self();
-  }
-
-  public T addNoHorizontalClassMergingRule(String clazz) {
-    return addKeepRules("-nohorizontalclassmerging class " + clazz);
+    return addNoVerticalClassMergingAnnotations()
+        .addInternalMatchInterfaceRule(
+            NoVerticalClassMergingRule.RULE_NAME, NoVerticalClassMerging.class);
   }
 
   public T enableNoHorizontalClassMergingAnnotations() {
-    if (!enableNoHorizontalClassMergingAnnotations) {
-      enableNoHorizontalClassMergingAnnotations = true;
-      addInternalMatchInterfaceRule(
-          NoHorizontalClassMergingRule.RULE_NAME, NoHorizontalClassMerging.class);
-    }
-    return self();
+    return addProgramClasses(NoHorizontalClassMerging.class)
+        .addInternalMatchInterfaceRule(
+            NoHorizontalClassMergingRule.RULE_NAME, NoHorizontalClassMerging.class);
+  }
+
+  public T addNoHorizontalClassMergingRule(String clazz) {
+    return addInternalKeepRules("-nohorizontalclassmerging class " + clazz);
   }
 
   public T enableNoStaticClassMergingAnnotations() {
-    if (!enableNoStaticClassMergingAnnotations) {
-      enableNoStaticClassMergingAnnotations = true;
-      addInternalMatchInterfaceRule(NoStaticClassMergingRule.RULE_NAME, NoStaticClassMerging.class);
-    }
-    return self();
+    return addNoStaticClassMergingAnnotations()
+        .addInternalMatchInterfaceRule(
+            NoStaticClassMergingRule.RULE_NAME, NoStaticClassMerging.class);
   }
 
   public T enableMemberValuePropagationAnnotations() {
@@ -511,54 +448,40 @@
 
   public T enableMemberValuePropagationAnnotations(boolean enable) {
     if (enable) {
-      if (!enableMemberValuePropagationAnnotations) {
-        enableMemberValuePropagationAnnotations = true;
-        addInternalKeepRules(
-            "-neverpropagatevalue class * { @com.android.tools.r8.NeverPropagateValue *; }");
-      }
-    } else {
-      assert !enableMemberValuePropagationAnnotations;
+      return addMemberValuePropagationAnnotations()
+          .addInternalKeepRules(
+              "-neverpropagatevalue class * { @com.android.tools.r8.NeverPropagateValue *; }");
     }
     return self();
   }
 
   public T enableReprocessClassInitializerAnnotations() {
-    if (!enableReprocessClassInitializerAnnotations) {
-      enableReprocessClassInitializerAnnotations = true;
-      addInternalKeepRules(
-          "-reprocessclassinitializer @com.android.tools.r8.ReprocessClassInitializer class *");
-    }
-    return self();
+    return addReprocessClassInitializerAnnotations()
+        .addInternalKeepRules(
+            "-reprocessclassinitializer @com.android.tools.r8.ReprocessClassInitializer class *");
   }
 
   public T enableNeverReprocessClassInitializerAnnotations() {
-    if (!enableNeverReprocessClassInitializerAnnotations) {
-      enableNeverReprocessClassInitializerAnnotations = true;
-      addInternalKeepRules(
-          "-neverreprocessclassinitializer @com.android.tools.r8.NeverReprocessClassInitializer"
-              + " class *");
-    }
-    return self();
+    return addNeverReprocessClassInitializerAnnotations()
+        .addInternalKeepRules(
+            "-neverreprocessclassinitializer @com.android.tools.r8.NeverReprocessClassInitializer"
+                + " class *");
   }
 
   public T enableReprocessMethodAnnotations() {
-    if (!enableReprocessMethodAnnotations) {
-      enableReprocessMethodAnnotations = true;
-      addInternalKeepRules(
-          "-reprocessmethod class * {", "  @com.android.tools.r8.ReprocessMethod <methods>;", "}");
-    }
-    return self();
+    return addReprocessMethodAnnotations()
+        .addInternalKeepRules(
+            "-reprocessmethod class * {",
+            "  @com.android.tools.r8.ReprocessMethod <methods>;",
+            "}");
   }
 
   public T enableNeverReprocessMethodAnnotations() {
-    if (!enableNeverReprocessMethodAnnotations) {
-      enableNeverReprocessMethodAnnotations = true;
-      addInternalKeepRules(
-          "-neverreprocessmethod class * {",
-          "  @com.android.tools.r8.NeverReprocessMethod <methods>;",
-          "}");
-    }
-    return self();
+    return addNeverReprocessMethodAnnotations()
+        .addInternalKeepRules(
+            "-neverreprocessmethod class * {",
+            "  @com.android.tools.r8.NeverReprocessMethod <methods>;",
+            "}");
   }
 
   public T enableProtoShrinking() {
@@ -574,22 +497,16 @@
   }
 
   public T enableSideEffectAnnotations() {
-    if (!enableSideEffectAnnotations) {
-      enableSideEffectAnnotations = true;
-      addInternalKeepRules(
-          "-assumemayhavesideeffects class * {",
-          "  @com.android.tools.r8.AssumeMayHaveSideEffects <methods>;",
-          "}");
-    }
-    return self();
+    return addSideEffectAnnotations()
+        .addInternalKeepRules(
+            "-assumemayhavesideeffects class * {",
+            "  @com.android.tools.r8.AssumeMayHaveSideEffects <methods>;",
+            "}");
   }
 
   public T assumeAllMethodsMayHaveSideEffects() {
-    if (!enableSideEffectAnnotations) {
-      enableSideEffectAnnotations = true;
-      addInternalKeepRules("-assumemayhavesideeffects class * { <methods>; }");
-    }
-    return self();
+    return addSideEffectAnnotations()
+        .addInternalKeepRules("-assumemayhavesideeffects class * { <methods>; }");
   }
 
   public T enableConstantArgumentAnnotations() {
@@ -598,13 +515,9 @@
 
   public T enableConstantArgumentAnnotations(boolean value) {
     if (value) {
-      if (!enableConstantArgumentAnnotations) {
-        enableConstantArgumentAnnotations = true;
-        addInternalKeepRules(
-            "-keepconstantarguments class * { @com.android.tools.r8.KeepConstantArguments *; }");
-      }
-    } else {
-      assert !enableConstantArgumentAnnotations;
+      return addConstantArgumentAnnotations()
+          .addInternalKeepRules(
+              "-keepconstantarguments class * { @com.android.tools.r8.KeepConstantArguments *; }");
     }
     return self();
   }
@@ -615,13 +528,9 @@
 
   public T enableUnusedArgumentAnnotations(boolean value) {
     if (value) {
-      if (!enableUnusedArgumentAnnotations) {
-        enableUnusedArgumentAnnotations = true;
-        addInternalKeepRules(
-            "-keepunusedarguments class * { @com.android.tools.r8.KeepUnusedArguments *; }");
-      }
-    } else {
-      assert !enableUnusedArgumentAnnotations;
+      return addUnusedArgumentAnnotations()
+          .addInternalKeepRules(
+              "-keepunusedarguments class * { @com.android.tools.r8.KeepUnusedArguments *; }");
     }
     return self();
   }
@@ -659,9 +568,10 @@
     return self();
   }
 
-  private void addInternalKeepRules(String... rules) {
+  T addInternalKeepRules(String... rules) {
     // We don't add these to the keep-rule set for other test provided rules.
     builder.addProguardConfiguration(Arrays.asList(rules), Origin.unknown());
+    return enableProguardTestOptions();
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
index 6f6c949..37673c2 100644
--- a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
@@ -12,11 +12,14 @@
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.FileUtils;
 import com.android.tools.r8.utils.StringUtils;
+import com.google.common.collect.Sets;
 import java.io.IOException;
+import java.lang.annotation.Annotation;
 import java.nio.file.Path;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
+import java.util.Set;
 
 public abstract class TestShrinkerBuilder<
         C extends BaseCompilerCommand,
@@ -30,6 +33,9 @@
   protected boolean enableOptimization = true;
   protected boolean enableMinification = true;
 
+  private final Set<Class<? extends Annotation>> addedTestingAnnotations =
+      Sets.newIdentityHashSet();
+
   TestShrinkerBuilder(TestState state, B builder, Backend backend) {
     super(state, builder, backend);
   }
@@ -301,6 +307,78 @@
 
   public abstract T addApplyMapping(String proguardMap);
 
+  public final T addAlwaysInliningAnnotations() {
+    return addTestingAnnotation(AlwaysInline.class);
+  }
+
+  public final T addAssumeNoSideEffectsAnnotations() {
+    return addTestingAnnotation(AssumeNoSideEffects.class);
+  }
+
+  public final T addConstantArgumentAnnotations() {
+    return addTestingAnnotation(KeepConstantArguments.class);
+  }
+
+  public final T addForceInliningAnnotations() {
+    return addTestingAnnotation(ForceInline.class);
+  }
+
+  public final T addInliningAnnotations() {
+    return addTestingAnnotation(NeverInline.class);
+  }
+
+  public final T addMemberValuePropagationAnnotations() {
+    return addTestingAnnotation(NeverPropagateValue.class);
+  }
+
+  public final T addNeverClassInliningAnnotations() {
+    return addTestingAnnotation(NeverClassInline.class);
+  }
+
+  public final T addNeverReprocessClassInitializerAnnotations() {
+    return addTestingAnnotation(NeverReprocessClassInitializer.class);
+  }
+
+  public final T addNeverReprocessMethodAnnotations() {
+    return addTestingAnnotation(NeverReprocessMethod.class);
+  }
+
+  public final T addNoHorizontalClassMergingAnnotations() {
+    return addTestingAnnotation(NoHorizontalClassMerging.class);
+  }
+
+  public final T addNoStaticClassMergingAnnotations() {
+    return addTestingAnnotation(NoStaticClassMerging.class);
+  }
+
+  public final T addNoUnusedInterfaceRemovalAnnotations() {
+    return addTestingAnnotation(NoUnusedInterfaceRemoval.class);
+  }
+
+  public final T addNoVerticalClassMergingAnnotations() {
+    return addTestingAnnotation(NoVerticalClassMerging.class);
+  }
+
+  public final T addReprocessClassInitializerAnnotations() {
+    return addTestingAnnotation(ReprocessClassInitializer.class);
+  }
+
+  public final T addReprocessMethodAnnotations() {
+    return addTestingAnnotation(ReprocessMethod.class);
+  }
+
+  public final T addSideEffectAnnotations() {
+    return addTestingAnnotation(AssumeMayHaveSideEffects.class);
+  }
+
+  public final T addUnusedArgumentAnnotations() {
+    return addTestingAnnotation(KeepUnusedArguments.class);
+  }
+
+  private T addTestingAnnotation(Class<? extends Annotation> clazz) {
+    return addedTestingAnnotations.add(clazz) ? addProgramClasses(clazz) : self();
+  }
+
   private static String getMethodLine(MethodReference method) {
     // Should we encode modifiers in method references?
     StringBuilder builder = new StringBuilder();
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/NoRelaxationForSerializableTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/NoRelaxationForSerializableTest.java
index 7521316..83a0155 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/NoRelaxationForSerializableTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/NoRelaxationForSerializableTest.java
@@ -125,9 +125,11 @@
     assumeTrue(parameters.isCfRuntime());
     testForProguard()
         .addProgramClasses(CLASSES)
-        .addTestingAnnotationsAsProgramClasses()
         .addKeepRuleFiles(configuration)
         .addKeepRules(KEEPMEMBER_RULES)
+        .addInliningAnnotations()
+        .addMemberValuePropagationAnnotations()
+        .addNoVerticalClassMergingAnnotations()
         .compile()
         .run(parameters.getRuntime(), MAIN)
         .assertSuccessWithOutput(EXPECTED_OUTPUT)
@@ -158,7 +160,9 @@
     assumeTrue(parameters.isCfRuntime());
     testForProguard()
         .addProgramClasses(CLASSES)
-        .addTestingAnnotationsAsProgramClasses()
+        .addInliningAnnotations()
+        .addMemberValuePropagationAnnotations()
+        .addNoVerticalClassMergingAnnotations()
         .addKeepRuleFiles(configuration)
         .compile()
         .run(parameters.getRuntime(), MAIN)
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/NonReboundFieldAccessWithMergedTypeTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/NonReboundFieldAccessWithMergedTypeTest.java
index b6183a3..79aae15 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/NonReboundFieldAccessWithMergedTypeTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/NonReboundFieldAccessWithMergedTypeTest.java
@@ -6,7 +6,6 @@
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.classmerging.horizontal.NonReboundFieldAccessOnMergedClassTest.C;
 import com.android.tools.r8.classmerging.horizontal.testclasses.NonReboundFieldAccessWithMergedTypeTestClasses;
 import org.junit.Test;
 import org.junit.runner.RunWith;
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/PreventMergeMainDexTracingTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/PreventMergeMainDexTracingTest.java
index 6a31a5e..13d8a62 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/PreventMergeMainDexTracingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/PreventMergeMainDexTracingTest.java
@@ -13,7 +13,6 @@
 import com.android.tools.r8.OutputMode;
 import com.android.tools.r8.R8TestCompileResult;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.classmerging.horizontal.PreventMergeMainDexListTest.Main;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import java.nio.file.Path;
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/TreeFixerConstructorCollisionTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/TreeFixerConstructorCollisionTest.java
index c7a7d9c..5239543 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/TreeFixerConstructorCollisionTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/TreeFixerConstructorCollisionTest.java
@@ -12,10 +12,6 @@
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.classmerging.horizontal.TreeFixerCollisionTest.A;
-import com.android.tools.r8.classmerging.horizontal.TreeFixerCollisionTest.B;
-import com.android.tools.r8.classmerging.horizontal.TreeFixerCollisionTest.C;
-import com.android.tools.r8.classmerging.horizontal.TreeFixerCollisionTest.Main;
 import org.junit.Test;
 
 public class TreeFixerConstructorCollisionTest extends HorizontalClassMergingTestBase {
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/TreeFixerInterfaceCollisionTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/TreeFixerInterfaceCollisionTest.java
index 946e113..6f3c8f8 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/TreeFixerInterfaceCollisionTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/TreeFixerInterfaceCollisionTest.java
@@ -13,8 +13,6 @@
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.NoVerticalClassMerging;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.classmerging.horizontal.TreeFixerInterfaceFixedCollisionTest.B;
-import com.android.tools.r8.classmerging.horizontal.TreeFixerInterfaceImplementedByParentTest.I;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import org.junit.Test;
 
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/TreeFixerInterfaceFixedCollisionTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/TreeFixerInterfaceFixedCollisionTest.java
index 1d3290a..627838f 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/TreeFixerInterfaceFixedCollisionTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/TreeFixerInterfaceFixedCollisionTest.java
@@ -13,10 +13,6 @@
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.NoVerticalClassMerging;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.classmerging.horizontal.TreeFixerInterfaceCollisionTest.C;
-import com.android.tools.r8.classmerging.horizontal.TreeFixerInterfaceImplementedByParentTest.B;
-import com.android.tools.r8.classmerging.horizontal.TreeFixerInterfaceImplementedByParentTest.E;
-import com.android.tools.r8.classmerging.horizontal.TreeFixerInterfaceImplementedByParentTest.I;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import org.junit.Test;
 
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassTest.java
index a40b387..abd38f5 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassTest.java
@@ -12,7 +12,6 @@
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.classmerging.horizontal.ConstructorMergingOverlapTest.Main;
 import org.junit.Test;
 
 public class VerticallyMergedClassTest extends HorizontalClassMergingTestBase {
diff --git a/src/test/java/com/android/tools/r8/compatproguard/CompatKeepClassMemberNamesTestRunner.java b/src/test/java/com/android/tools/r8/compatproguard/CompatKeepClassMemberNamesTestRunner.java
index de0e481..034f226 100644
--- a/src/test/java/com/android/tools/r8/compatproguard/CompatKeepClassMemberNamesTestRunner.java
+++ b/src/test/java/com/android/tools/r8/compatproguard/CompatKeepClassMemberNamesTestRunner.java
@@ -11,7 +11,6 @@
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.BaseCompilerCommand;
-import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.ProguardVersion;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestCompileResult;
@@ -40,8 +39,7 @@
 
   private static Class<?> MAIN_CLASS = CompatKeepClassMemberNamesTest.class;
   private static Class<?> BAR_CLASS = CompatKeepClassMemberNamesTest.Bar.class;
-  private static Collection<Class<?>> CLASSES =
-      ImmutableList.of(MAIN_CLASS, BAR_CLASS, NeverInline.class);
+  private static Collection<Class<?>> CLASSES = ImmutableList.of(MAIN_CLASS, BAR_CLASS);
 
   private static String KEEP_RULE =
       "class "
@@ -112,7 +110,12 @@
           T extends TestShrinkerBuilder<C, B, CR, RR, T>>
       void testWithoutRules(TestShrinkerBuilder<C, B, CR, RR, T> builder) throws Exception {
     assertBarIsAbsent(
-        builder.addProgramClasses(CLASSES).addKeepMainRule(MAIN_CLASS).noMinification().compile());
+        builder
+            .addProgramClasses(CLASSES)
+            .addKeepMainRule(MAIN_CLASS)
+            .addInliningAnnotations()
+            .noMinification()
+            .compile());
   }
 
   @Test
@@ -207,6 +210,7 @@
         .addProgramClasses(CLASSES)
         .addKeepMainRule(MAIN_CLASS)
         .addKeepRules("-keepclassmembers " + KEEP_RULE_NON_STATIC)
+        .addInliningAnnotations()
         .noMinification();
   }
 
@@ -238,7 +242,8 @@
     return builder
         .addProgramClasses(CLASSES)
         .addKeepMainRule(MAIN_CLASS)
-        .addKeepRules("-keepclassmembers " + KEEP_RULE);
+        .addKeepRules("-keepclassmembers " + KEEP_RULE)
+        .addInliningAnnotations();
   }
 
   private <CR extends TestCompileResult<CR, RR>, RR extends TestRunResult<RR>>
@@ -309,6 +314,7 @@
         builder
             .addProgramClasses(CLASSES)
             .addKeepMainRule(MAIN_CLASS)
+            .addInliningAnnotations()
             .noMinification()
             .addKeepRules("-keepclassmembers class " + Bar.class.getTypeName())
             .compile());
@@ -394,7 +400,8 @@
     return builder
         .addProgramClasses(CLASSES)
         .addKeepMainRule(MAIN_CLASS)
-        .addKeepRules("-keepclassmembernames " + KEEP_RULE);
+        .addKeepRules("-keepclassmembernames " + KEEP_RULE)
+        .addInliningAnnotations();
   }
 
   private <CR extends TestCompileResult<CR, RR>, RR extends TestRunResult<RR>>
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/NonNullParamTest.java b/src/test/java/com/android/tools/r8/ir/optimize/NonNullParamTest.java
index 964848a..04b870f 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/NonNullParamTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/NonNullParamTest.java
@@ -65,7 +65,6 @@
         .addProgramClasses(classes)
         .addKeepMainRule(mainClass)
         .addKeepRules(ImmutableList.of("-keepattributes InnerClasses,Signature,EnclosingMethod"))
-        .addTestingAnnotationsAsProgramClasses()
         // All tests are checking if invocations to certain null-check utils are gone.
         .noMinification()
         .addOptionsModification(
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/SingleTargetAfterInliningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/SingleTargetAfterInliningTest.java
index f5c7da8..2012c6f 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/SingleTargetAfterInliningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/SingleTargetAfterInliningTest.java
@@ -54,7 +54,6 @@
         .enableNeverClassInliningAnnotations()
         .enableNoHorizontalClassMergingAnnotations()
         .enableSideEffectAnnotations()
-        .enableNoHorizontalClassMergingAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .inspect(this::inspect)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetNameInClassInitializerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetNameInClassInitializerTest.java
index d8d0c47..55afd12 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetNameInClassInitializerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetNameInClassInitializerTest.java
@@ -45,7 +45,6 @@
     builder.addAll(ToolHelper.getClassFilesForTestDirectory(
         ToolHelper.getPackageDirectoryForTestPackage(MAIN.getPackage()),
         path -> path.getFileName().toString().startsWith("GetNameClinit")));
-    builder.add(ToolHelper.getClassFileForTestClass(NeverInline.class));
     classPaths = builder.build();
   }
 
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetSimpleNameTest.java b/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetSimpleNameTest.java
index 14d7837..a9a5c6f 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetSimpleNameTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetSimpleNameTest.java
@@ -125,16 +125,6 @@
       "Inner",
       "Inner"
   );
-  private static final String OUTPUT_WITH_SHRUNK_ATTRIBUTES = StringUtils.lines(
-      "Local_t03",
-      "InnerLocal",
-      "$",
-      "$$",
-      "Local[][][]",
-      "[][][]",
-      "Outer$Inner",
-      "Outer$Inner"
-  );
   // JDK8 computes the simple name differently: some assumptions about non-member classes,
   // e.g., 1 or more digits (followed by the simple name if it's local).
   // Since JDK9, the simple name is computed by stripping off the package name.
@@ -171,8 +161,6 @@
     builder.add(ToolHelper.getClassFileForTestClass(Outer.class));
     builder.add(ToolHelper.getClassFileForTestClass(Outer.Inner.class));
     builder.add(ToolHelper.getClassFileForTestClass(Outer.TestHelper.class));
-    builder.add(ToolHelper.getClassFileForTestClass(ForceInline.class));
-    builder.add(ToolHelper.getClassFileForTestClass(NeverInline.class));
     classPaths = builder.build();
   }
 
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
index 9d4c185..9ee6ad7 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
@@ -13,7 +13,6 @@
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.R8TestRunResult;
 import com.android.tools.r8.SingleTestRunResult;
 import com.android.tools.r8.TestBase;
@@ -88,7 +87,6 @@
 
   private static final Class<?> main = TrivialTestClass.class;
   private static final Class<?>[] classes = {
-    NeverInline.class,
     TrivialTestClass.class,
     Simple.class,
     SimpleWithGetter.class,
@@ -238,7 +236,6 @@
   public void testMoveToHost_fieldOnly() throws Exception {
     Class<?> main = MoveToHostFieldOnlyTestClass.class;
     Class<?>[] classes = {
-        NeverInline.class,
         MoveToHostFieldOnlyTestClass.class,
         HostOkFieldOnly.class,
         CandidateOkFieldOnly.class
@@ -269,7 +266,6 @@
   public void testMoveToHost() throws Exception {
     Class<?> main = MoveToHostTestClass.class;
     Class<?>[] classes = {
-        NeverInline.class,
         MoveToHostTestClass.class,
         HostOk.class,
         CandidateOk.class,
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingAfterHorizontalMergingFieldTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingAfterHorizontalMergingFieldTest.java
index dc74758..5da69a2 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingAfterHorizontalMergingFieldTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingAfterHorizontalMergingFieldTest.java
@@ -82,7 +82,6 @@
     testForJvm()
         .addProgramClasses(LIBRARY_CLASSES)
         .addProgramClasses(PROGRAM_CLASSES)
-        .addTestingAnnotationsAsProgramClasses()
         .run(parameters.getRuntime(), ProgramClass.class)
         .assertSuccessWithOutput(EXPECTED_SUCCESS);
   }
@@ -92,7 +91,6 @@
     R8TestCompileResult libraryResult =
         testForR8(parameters.getBackend())
             .addProgramClasses(LIBRARY_CLASSES)
-            .addTestingAnnotationsAsProgramClasses()
             .addKeepMainRule(LibraryMain.class)
             .setMinApi(parameters.getApiLevel())
             .compile();
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingAfterHorizontalMergingMethodTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingAfterHorizontalMergingMethodTest.java
index 7429e57..e101caa 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingAfterHorizontalMergingMethodTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingAfterHorizontalMergingMethodTest.java
@@ -63,7 +63,6 @@
   // Test runner code follows.
 
   private static final Class<?>[] LIBRARY_CLASSES = {
-      NeverInline.class,
       LibraryA.class,
       LibraryB.class,
       LibraryMain.class
diff --git a/src/test/java/com/android/tools/r8/naming/b130791310/B130791310.java b/src/test/java/com/android/tools/r8/naming/b130791310/B130791310.java
index 23271e2..ad2f639 100644
--- a/src/test/java/com/android/tools/r8/naming/b130791310/B130791310.java
+++ b/src/test/java/com/android/tools/r8/naming/b130791310/B130791310.java
@@ -122,7 +122,7 @@
         .addProgramClasses(CLASSES)
         .addKeepClassAndMembersRules(MAIN)
         .addKeepRules(RULES)
-        .addTestingAnnotationsAsProgramClasses()
+        .addNeverClassInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .applyIf(
             !enableClassMerging, builder -> builder.addKeepRules("-optimizations !class/merging/*"))
diff --git a/src/test/java/com/android/tools/r8/shaking/annotations/AnnotationsOnTargetedMethodTest.java b/src/test/java/com/android/tools/r8/shaking/annotations/AnnotationsOnTargetedMethodTest.java
index c4d9068..ace926f 100644
--- a/src/test/java/com/android/tools/r8/shaking/annotations/AnnotationsOnTargetedMethodTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/annotations/AnnotationsOnTargetedMethodTest.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.shaking.annotations;
 
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.NoVerticalClassMerging;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -34,7 +35,7 @@
 
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimes().withAllApiLevels().build();
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
   }
 
   public AnnotationsOnTargetedMethodTest(TestParameters parameters) {
@@ -52,9 +53,11 @@
     testForR8(parameters.getBackend())
         .addInnerClasses(AnnotationsOnTargetedMethodTest.class)
         .addKeepMainRule(TestClass.class)
-        .addKeepRules("-keepattributes *Annotation*", "-dontobfuscate")
+        .addKeepRuntimeVisibleAnnotations()
         .enableInliningAnnotations()
+        .enableNoHorizontalClassMergingAnnotations()
         .enableNoVerticalClassMergingAnnotations()
+        .noMinification()
         .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), TestClass.class)
         .assertSuccessWithOutput(expectedOutput);
@@ -91,6 +94,7 @@
     void targetedMethod();
   }
 
+  @NoHorizontalClassMerging
   static class InterfaceImpl implements Interface {
 
     @NeverInline
@@ -100,6 +104,7 @@
     }
   }
 
+  @NoHorizontalClassMerging
   static class OtherInterfaceImpl implements Interface {
 
     @NeverInline
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
index 445e24b..7c3a2d9 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
@@ -54,13 +54,12 @@
     switch (shrinker) {
       case PROGUARD6:
         assertTrue(parameters.isCfRuntime());
-        return testForProguard().addTestingAnnotationsAsProgramClasses();
+        return testForProguard().addInliningAnnotations().addNeverClassInliningAnnotations();
       case R8:
         return testForR8(parameters.getBackend())
-            .addTestingAnnotationsAsProgramClasses()
             .allowUnusedProguardConfigurationRules(allowDiagnosticInfoMessages)
-            .enableNeverClassInliningAnnotations()
-            .enableInliningAnnotations();
+            .enableInliningAnnotations()
+            .enableNeverClassInliningAnnotations();
       default:
         throw new Unreachable();
     }