Make existing tests robust towards more aggressive class inlining

Change-Id: I36d7ee13799d4cbbbfd2006cfc7a26a189d2e539
diff --git a/src/test/examples/classmerging/NeverClassInline.java b/src/test/examples/classmerging/NeverClassInline.java
new file mode 100644
index 0000000..2dca10e
--- /dev/null
+++ b/src/test/examples/classmerging/NeverClassInline.java
@@ -0,0 +1,10 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package classmerging;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+@Target({ElementType.TYPE})
+public @interface NeverClassInline {}
diff --git a/src/test/examples/classmerging/ProguardFieldMapTest.java b/src/test/examples/classmerging/ProguardFieldMapTest.java
index 0cbf8a1..e512173 100644
--- a/src/test/examples/classmerging/ProguardFieldMapTest.java
+++ b/src/test/examples/classmerging/ProguardFieldMapTest.java
@@ -16,6 +16,7 @@
     public String f = "A.f";
   }
 
+  @NeverClassInline
   public static class B extends A {
 
     public void test() {
diff --git a/src/test/examples/classmerging/ProguardMethodMapTest.java b/src/test/examples/classmerging/ProguardMethodMapTest.java
index 9ce0ad7..dd3ccff 100644
--- a/src/test/examples/classmerging/ProguardMethodMapTest.java
+++ b/src/test/examples/classmerging/ProguardMethodMapTest.java
@@ -18,6 +18,7 @@
     }
   }
 
+  @NeverClassInline
   public static class B extends A {
 
     @Override
diff --git a/src/test/examples/classmerging/keep-rules.txt b/src/test/examples/classmerging/keep-rules.txt
index 11a66c6..5297ee9 100644
--- a/src/test/examples/classmerging/keep-rules.txt
+++ b/src/test/examples/classmerging/keep-rules.txt
@@ -68,6 +68,7 @@
   public static void main(...);
 }
 
+-neverclassinline @classmerging.NeverClassInline class *
 -neverinline class * {
   @classmerging.NeverInline <methods>;
 }
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/NonConstructorRelaxationTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/NonConstructorRelaxationTest.java
index f203ade..b8288d8 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/NonConstructorRelaxationTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/NonConstructorRelaxationTest.java
@@ -36,7 +36,8 @@
 
   @Parameterized.Parameters(name = "{0}, argument removal: {1}")
   public static List<Object[]> data() {
-    return buildParameters(getTestParameters().withAllRuntimes().build(), BooleanUtils.values());
+    return buildParameters(
+        getTestParameters().withAllRuntimesAndApiLevels().build(), BooleanUtils.values());
   }
 
   public NonConstructorRelaxationTest(TestParameters parameters, boolean enableArgumentRemoval) {
@@ -99,7 +100,7 @@
                 "  *** pBlah1();",
                 "}")
             .allowAccessModification()
-            .setMinApi(parameters.getRuntime())
+            .setMinApi(parameters.getApiLevel())
             .run(parameters.getRuntime(), mainClass);
 
     assertEquals(
@@ -157,6 +158,7 @@
             .addProgramFiles(ToolHelper.getClassFilesForTestPackage(mainClass.getPackage()))
             .addKeepMainRule(mainClass)
             .addOptionsModification(o -> o.enableVerticalClassMerging = enableVerticalClassMerging)
+            .enableClassInliningAnnotations()
             .enableInliningAnnotations()
             .enableMemberValuePropagationAnnotations()
             .noMinification()
@@ -171,7 +173,7 @@
                 "  *** p*();",
                 "}")
             .allowAccessModification()
-            .setMinApi(parameters.getRuntime())
+            .setMinApi(parameters.getApiLevel())
             .run(parameters.getRuntime(), mainClass);
 
     assertEquals(
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Sub1.java b/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Sub1.java
index 0793001..b45a708 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Sub1.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Sub1.java
@@ -3,8 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.accessrelaxation.privateinstance;
 
+import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 
+@NeverClassInline
 public class Sub1 extends Base implements Itf1 {
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Sub2.java b/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Sub2.java
index 018bc90..fbc2ebc 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Sub2.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Sub2.java
@@ -3,8 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.accessrelaxation.privateinstance;
 
+import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 
+@NeverClassInline
 public class Sub2 extends Base implements Itf2 {
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/classmerging/VerticalClassMergerInitTest.java b/src/test/java/com/android/tools/r8/classmerging/VerticalClassMergerInitTest.java
index 1c4f406..dd41bc9 100644
--- a/src/test/java/com/android/tools/r8/classmerging/VerticalClassMergerInitTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/VerticalClassMergerInitTest.java
@@ -8,6 +8,7 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
@@ -45,6 +46,7 @@
         .addInnerClasses(VerticalClassMergerInitTest.class)
         .addKeepMainRule(Main.class)
         .addMainDexRules("-keep class " + Main.class.getTypeName())
+        .enableClassInliningAnnotations()
         .setMinApi(AndroidApiLevel.K_WATCH)
         .addOptionsModification(
             options -> {
@@ -76,6 +78,7 @@
     }
   }
 
+  @NeverClassInline
   public static class Child extends Base {
 
     // We need a static member to force the main-dex tracing to include Child and Base.
diff --git a/src/test/java/com/android/tools/r8/classmerging/VerticalClassMergerTest.java b/src/test/java/com/android/tools/r8/classmerging/VerticalClassMergerTest.java
index fc3f22f..7fab7a1 100644
--- a/src/test/java/com/android/tools/r8/classmerging/VerticalClassMergerTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/VerticalClassMergerTest.java
@@ -509,8 +509,8 @@
                 "    1:1:void <init>():14:14 -> <init>",
                 "    2:2:void <init>():16:16 -> <init>",
                 "classmerging.ProguardFieldMapTest$B -> classmerging.ProguardFieldMapTest$B:",
-                "    1:1:void <init>():19:19 -> <init>",
-                "    1:1:void test():22:22 -> test");
+                "    1:1:void <init>():20:20 -> <init>",
+                "    1:1:void test():23:23 -> test");
     runTestOnInput(
         main,
         readProgramFiles(programFiles),
@@ -536,10 +536,10 @@
                 "classmerging.ProguardFieldMapTest$B -> classmerging.ProguardFieldMapTest$B:",
                 "    java.lang.String classmerging.ProguardFieldMapTest$A.f -> f",
                 "    1:1:void classmerging.ProguardFieldMapTest$A.<init>():14:14 -> <init>",
-                "    1:1:void <init>():19 -> <init>",
+                "    1:1:void <init>():20 -> <init>",
                 "    2:2:void classmerging.ProguardFieldMapTest$A.<init>():16:16 -> <init>",
-                "    2:2:void <init>():19 -> <init>",
-                "    1:1:void test():22:22 -> test");
+                "    2:2:void <init>():20 -> <init>",
+                "    1:1:void test():23:23 -> test");
     Set<String> preservedClassNames =
         ImmutableSet.of("classmerging.ProguardFieldMapTest", "classmerging.ProguardFieldMapTest$B");
     runTestOnInput(
@@ -577,8 +577,8 @@
                 "    1:1:void <init>():14:14 -> <init>",
                 "    1:1:void method():17:17 -> method",
                 "classmerging.ProguardMethodMapTest$B -> classmerging.ProguardMethodMapTest$B:",
-                "    1:1:void <init>():21:21 -> <init>",
-                "    1:2:void method():25:26 -> method");
+                "    1:1:void <init>():22:22 -> <init>",
+                "    1:2:void method():26:27 -> method");
     runTestOnInput(
         main,
         readProgramFiles(programFiles),
@@ -606,8 +606,8 @@
                 // A.<init> has been inlined into B.<init>?
                 "    1:1:void classmerging.ProguardMethodMapTest$A.<init>():14:14 -> <init>",
                 // TODO(christofferqa): Should this be " ...<init>():21:21 -> <init>"?
-                "    1:1:void <init>():21 -> <init>",
-                "    1:2:void method():25:26 -> method",
+                "    1:1:void <init>():22 -> <init>",
+                "    1:2:void method():26:27 -> method",
                 "    1:1:void classmerging.ProguardMethodMapTest$A.method():17:17 -> "
                     + "method$classmerging$ProguardMethodMapTest$A");
     Set<String> preservedClassNames =
@@ -647,10 +647,10 @@
                 "classmerging.ProguardMethodMapTest$A -> classmerging.ProguardMethodMapTest$A:",
                 "    1:1:void <init>():14:14 -> <init>",
                 "classmerging.ProguardMethodMapTest$B -> classmerging.ProguardMethodMapTest$B:",
-                "    1:1:void <init>():21:21 -> <init>",
-                "    1:1:void method():25:25 -> method",
+                "    1:1:void <init>():22:22 -> <init>",
+                "    1:1:void method():26:26 -> method",
                 "    2:2:void classmerging.ProguardMethodMapTest$A.method():17:17 -> method",
-                "    2:2:void method():26 -> method");
+                "    2:2:void method():27 -> method");
     runTestOnInput(
         main,
         readProgramFiles(programFiles),
@@ -677,10 +677,10 @@
                 "    1:2:void main(java.lang.String[]):10:11 -> main",
                 "classmerging.ProguardMethodMapTest$B -> classmerging.ProguardMethodMapTest$B:",
                 "    1:1:void classmerging.ProguardMethodMapTest$A.<init>():14:14 -> <init>",
-                "    1:1:void <init>():21 -> <init>",
-                "    1:1:void method():25:25 -> method",
+                "    1:1:void <init>():22 -> <init>",
+                "    1:1:void method():26:26 -> method",
                 "    2:2:void classmerging.ProguardMethodMapTest$A.method():17:17 -> method",
-                "    2:2:void method():26 -> method");
+                "    2:2:void method():27 -> method");
     Set<String> preservedClassNames =
         ImmutableSet.of(
             "classmerging.ProguardMethodMapTest", "classmerging.ProguardMethodMapTest$B");
diff --git a/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithInvokeInterfaceTestRunner.java b/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithInvokeInterfaceTestRunner.java
index b89f09a..c04e3eb 100644
--- a/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithInvokeInterfaceTestRunner.java
+++ b/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithInvokeInterfaceTestRunner.java
@@ -8,7 +8,6 @@
 
 import com.android.tools.r8.D8TestCompileResult;
 import com.android.tools.r8.R8TestCompileResult;
-import com.android.tools.r8.TestBase;
 import com.android.tools.r8.debug.DebugTestBase;
 import com.android.tools.r8.debug.DebugTestBase.JUnit3Wrapper.Command;
 import com.android.tools.r8.debug.DebugTestConfig;
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 07106f3..6b1d25b 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
@@ -43,7 +43,7 @@
 
   @Parameterized.Parameters(name = "{0}")
   public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimes().build();
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
   }
 
   public NonNullParamTest(TestParameters parameters) {
@@ -54,7 +54,7 @@
     options.enableDevirtualization = false;
   }
 
-  CodeInspector buildAndRun(
+  private CodeInspector buildAndRun(
       Class<?> mainClass,
       Collection<Class<?>> classes,
       ThrowableConsumer<R8FullTestBuilder> configuration)
@@ -73,7 +73,7 @@
               options.inliningInstructionLimit = 4;
             })
         .apply(configuration)
-        .setMinApi(parameters.getRuntime())
+        .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), mainClass)
         .assertSuccessWithOutput(javaOutput)
         .inspector();
@@ -184,7 +184,7 @@
                 NonNullParamAfterInvokeVirtual.class,
                 NotPinnedClass.class,
                 mainClass),
-            R8TestBuilder::enableInliningAnnotations);
+            builder -> builder.enableClassInliningAnnotations().enableInliningAnnotations());
 
     ClassSubject mainSubject = inspector.clazz(NonNullParamAfterInvokeVirtual.class);
     assertThat(mainSubject, isPresent());
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/nonnull/NonNullParamAfterInvokeVirtual.java b/src/test/java/com/android/tools/r8/ir/optimize/nonnull/NonNullParamAfterInvokeVirtual.java
index 994c87a..d577644 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/nonnull/NonNullParamAfterInvokeVirtual.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/nonnull/NonNullParamAfterInvokeVirtual.java
@@ -5,8 +5,10 @@
 
 import static com.android.tools.r8.ir.optimize.nonnull.IntrinsicsDeputy.checkParameterIsNotNull;
 
+import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 
+@NeverClassInline
 public class NonNullParamAfterInvokeVirtual {
 
   @NeverInline
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 40cd981..95e7430 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
@@ -9,6 +9,7 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assume.assumeFalse;
 
+import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.ProguardTestBuilder;
 import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestBase;
@@ -63,6 +64,7 @@
   byte foo();
 }
 
+@NeverClassInline
 class SomeClass implements SomeInterface {
   @Override
   public byte foo() {
@@ -81,7 +83,8 @@
 public class B130791310 extends TestBase {
   private static final Class<?> MAIN = TestClass.class;
   private static final List<Class<?>> CLASSES =
-      ImmutableList.of(MAIN, SomeLogic.class, SomeInterface.class, SomeClass.class);
+      ImmutableList.of(
+          MAIN, SomeLogic.class, SomeInterface.class, SomeClass.class, NeverClassInline.class);
   private static final String RULES = StringUtils.lines(
       "-keepnames class **.SomeLogic {",
       "  **.SomeInterface someMethod(**.SomeClass);",
@@ -149,7 +152,8 @@
             .addProgramClasses(CLASSES)
             .addLibraryFiles(ToolHelper.getDefaultAndroidJar())
             .addKeepClassAndMembersRules(MAIN)
-            .addKeepRules(RULES);
+            .addKeepRules(RULES)
+            .enableClassInliningAnnotations();
     if (!enableClassMerging) {
       builder.addOptionsModification(o -> o.enableVerticalClassMerging = false);
     }