Merge "Clean up uses of synchronized keyword just for disablining inlining."
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationTestBase.java b/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationTestBase.java
index fbf630c..abd1b5f 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationTestBase.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationTestBase.java
@@ -38,20 +38,6 @@
     return builder;
   }
 
-  static R8Command.Builder loadProgramFiles(Backend backend, Package p, Class... classes)
-      throws Exception {
-    R8Command.Builder builder = R8Command.builder();
-    builder.addProgramFiles(ToolHelper.getClassFilesForTestPackage(p));
-    for (Class clazz : classes) {
-      builder.addProgramFiles(ToolHelper.getClassFileForTestClass(clazz));
-    }
-    builder.setProgramConsumer(emptyConsumer(backend)).addLibraryFiles(runtimeJar(backend));
-    if (backend == Backend.DEX) {
-      builder.setMinApiLevel(ToolHelper.getMinApiLevelForDexVm().getLevel());
-    }
-    return builder;
-  }
-
   void compareReferenceJVMAndProcessed(AndroidApp app, Class mainClass) throws Exception {
     // Run on Jvm.
     String jvmOutput = runOnJava(mainClass);
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 44149e0..7ab3625 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/NonConstructorRelaxationTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/NonConstructorRelaxationTest.java
@@ -6,7 +6,6 @@
 
 import static org.junit.Assert.assertEquals;
 
-import com.android.tools.r8.R8Command;
 import com.android.tools.r8.R8TestRunResult;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.accessrelaxation.privateinstance.Base;
@@ -18,8 +17,6 @@
 import com.android.tools.r8.accessrelaxation.privatestatic.BB;
 import com.android.tools.r8.accessrelaxation.privatestatic.C;
 import com.android.tools.r8.naming.MemberNaming.MethodSignature;
-import com.android.tools.r8.origin.Origin;
-import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -67,21 +64,22 @@
                 + "java.lang.IllegalAccessErrorB::bar() >> java.lang.IllegalAccessError",
             "B::foo()A::foo()A::baz()A::bar()A::bar(int)",
             "C::blah(int)");
-
+    Class<?> mainClass = C.class;
     if (backend == Backend.CF) {
       // Only run JVM reference once (for CF backend)
-      testForJvm().addTestClasspath().run(C.class).assertSuccessWithOutput(expectedOutput);
+      testForJvm().addTestClasspath().run(mainClass).assertSuccessWithOutput(expectedOutput);
     }
 
     R8TestRunResult result =
         testForR8(backend)
-            .addProgramFiles(ToolHelper.getClassFilesForTestPackage(C.class.getPackage()))
+            .addProgramFiles(ToolHelper.getClassFilesForTestPackage(mainClass.getPackage()))
             .addOptionsModification(o -> o.enableArgumentRemoval = enableArgumentRemoval)
+            .noMinification()
             .addKeepRules(
                 // Note: we use '-checkdiscard' to indirectly check that the access relaxation is
                 // done which leads to inlining of all pB*** methods so they are removed. Without
                 // access relaxation inlining is not performed and method are kept.
-                "-keep class " + C.class.getCanonicalName() + "{",
+                "-keep class " + mainClass.getCanonicalName() + "{",
                 "  public static void main(java.lang.String[]);",
                 "}",
                 "",
@@ -100,9 +98,8 @@
                 "  *** pBlah1();",
                 "}",
                 "",
-                "-dontobfuscate",
                 "-allowaccessmodification")
-            .run(C.class);
+            .run(mainClass);
 
     assertEquals(
         expectedOutput,
@@ -134,42 +131,60 @@
   }
 
   private void testInstanceMethodRelaxation(boolean enableVerticalClassMerging) throws Exception {
-    Class mainClass = TestMain.class;
-    R8Command.Builder builder = loadProgramFiles(backend, mainClass.getPackage());
+    String expectedOutput =
+        StringUtils.lines(
+            "Base::foo()",
+            "Base::foo1()",
+            "Base::foo2()",
+            "Sub1::foo1()",
+            "Itf1::foo1(0) >> Sub1::foo1()",
+            "Sub1::bar1(0)",
+            "Sub2::foo2()",
+            "Itf2::foo2(0) >> Sub2::foo2()",
+            "Sub2::bar2(0)");
+    Class<?> mainClass = TestMain.class;
+    if (backend == Backend.CF) {
+      // Only run JVM reference once (for CF backend)
+      testForJvm().addTestClasspath().run(mainClass).assertSuccessWithOutput(expectedOutput);
+    }
 
-    builder.addProguardConfiguration(
-        ImmutableList.of(
-            "-keep class " + mainClass.getCanonicalName() + "{",
-            "  public static void main(java.lang.String[]);",
-            "}",
-            "",
-            "-checkdiscard class " + Base.class.getCanonicalName() + "{",
-            "  *** p*();",
-            "}",
-            "",
-            "-checkdiscard class " + Sub1.class.getCanonicalName() + "{",
-            "  *** p*();",
-            "}",
-            "",
-            "-checkdiscard class " + Sub2.class.getCanonicalName() + "{",
-            "  *** p*();",
-            "}",
-            "",
-            "-dontobfuscate",
-            "-allowaccessmodification"
-        ),
-        Origin.unknown());
+    R8TestRunResult result =
+        testForR8(backend)
+            .addProgramFiles(ToolHelper.getClassFilesForTestPackage(mainClass.getPackage()))
+            .addOptionsModification(o -> o.enableVerticalClassMerging = enableVerticalClassMerging)
+            .enableInliningAnnotations()
+            .noMinification()
+            .addKeepRules(
+                "-keep class " + mainClass.getCanonicalName() + "{",
+                "  public static void main(java.lang.String[]);",
+                "}",
+                "",
+                "-checkdiscard class " + Base.class.getCanonicalName() + "{",
+                "  *** p*();",
+                "}",
+                "",
+                "-checkdiscard class " + Sub1.class.getCanonicalName() + "{",
+                "  *** p*();",
+                "}",
+                "",
+                "-checkdiscard class " + Sub2.class.getCanonicalName() + "{",
+                "  *** p*();",
+                "}",
+                "",
+                "-allowaccessmodification"
+            )
+        .run(mainClass);
 
-    AndroidApp app =
-        ToolHelper.runR8(
-            builder.build(),
-            options -> options.enableVerticalClassMerging = enableVerticalClassMerging);
-    compareReferenceJVMAndProcessed(app, mainClass);
+    assertEquals(
+        expectedOutput,
+        result
+            .getStdOut()
+            .replace("java.lang.IncompatibleClassChangeError", "java.lang.IllegalAccessError"));
 
     // When vertical class merging is enabled, Itf1 is merged into Sub1 and Itf2 is merged into
     // Sub2, and as a result of these merges, neither Sub1 nor Sub2 end up in the output because of
     // inlining.
-    CodeInspector codeInspector = new CodeInspector(app);
+    CodeInspector codeInspector = result.inspector();
     assertPublic(codeInspector, Base.class, new MethodSignature("foo", STRING, ImmutableList.of()));
 
     // Base#foo?() can't be publicized due to Itf<1>#foo<1>().
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Base.java b/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Base.java
index 6325c78..130ba9a 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Base.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Base.java
@@ -3,10 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.accessrelaxation.privateinstance;
 
+import com.android.tools.r8.NeverInline;
+
 public class Base {
 
-  // NOTE: here and below 'synchronized' is supposed to disable inlining of this method.
-  private synchronized String foo() {
+  @NeverInline
+  private String foo() {
     return "Base::foo()";
   }
 
@@ -14,7 +16,8 @@
     return foo();
   }
 
-  private synchronized String foo1() {
+  @NeverInline
+  private String foo1() {
     return "Base::foo1()";
   }
 
@@ -22,7 +25,8 @@
     return foo1();
   }
 
-  private synchronized String foo2() {
+  @NeverInline
+  private String foo2() {
     return "Base::foo2()";
   }
 
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 317aaff..0793001 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,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.accessrelaxation.privateinstance;
 
+import com.android.tools.r8.NeverInline;
+
 public class Sub1 extends Base implements Itf1 {
 
   @Override
@@ -10,7 +12,8 @@
     return "Sub1::foo1()";
   }
 
-  private synchronized String bar1(int i) {
+  @NeverInline
+  private String bar1(int i) {
     return "Sub1::bar1(" + i + ")";
   }
 
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 039e3ac..018bc90 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,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.accessrelaxation.privateinstance;
 
+import com.android.tools.r8.NeverInline;
+
 public class Sub2 extends Base implements Itf2 {
 
   @Override
@@ -10,7 +12,8 @@
     return "Sub2::foo2()";
   }
 
-  private synchronized String bar1(int i) {
+  @NeverInline
+  private String bar1(int i) {
     return "Sub2::bar1(" + i + ")";
   }
 
@@ -18,7 +21,8 @@
     return bar1(1);
   }
 
-  private synchronized String bar2(int i) {
+  @NeverInline
+  private String bar2(int i) {
     return "Sub2::bar2(" + i + ")";
   }
 
diff --git a/src/test/java/com/android/tools/r8/movestringconstants/MoveStringConstantsTest.java b/src/test/java/com/android/tools/r8/movestringconstants/MoveStringConstantsTest.java
index ec728b1..967277c 100644
--- a/src/test/java/com/android/tools/r8/movestringconstants/MoveStringConstantsTest.java
+++ b/src/test/java/com/android/tools/r8/movestringconstants/MoveStringConstantsTest.java
@@ -9,6 +9,7 @@
 
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.ForceInline;
+import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.R8Command;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
@@ -41,6 +42,7 @@
   private void runTest(Consumer<CodeInspector> inspection) throws Exception {
     R8Command.Builder builder = R8Command.builder();
     builder.addProgramFiles(ToolHelper.getClassFileForTestClass(ForceInline.class));
+    builder.addProgramFiles(ToolHelper.getClassFileForTestClass(NeverInline.class));
     builder.addProgramFiles(ToolHelper.getClassFileForTestClass(TestClass.class));
     builder.addProgramFiles(ToolHelper.getClassFileForTestClass(Utils.class));
     builder.addLibraryFiles(runtimeJar(backend));
@@ -49,6 +51,7 @@
     builder.addProguardConfiguration(
         ImmutableList.of(
             "-forceinline class * { @com.android.tools.r8.ForceInline *; }",
+            "-neverinline class * { @com.android.tools.r8.NeverInline *; }",
             "-keep class " + TestClass.class.getCanonicalName() + "{ *; }",
             "-dontobfuscate",
             "-allowaccessmodification"
diff --git a/src/test/java/com/android/tools/r8/movestringconstants/TestClass.java b/src/test/java/com/android/tools/r8/movestringconstants/TestClass.java
index 086eac6..2af704d 100644
--- a/src/test/java/com/android/tools/r8/movestringconstants/TestClass.java
+++ b/src/test/java/com/android/tools/r8/movestringconstants/TestClass.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.movestringconstants;
 
 import com.android.tools.r8.ForceInline;
+import com.android.tools.r8.NeverInline;
 
 public class TestClass {
   public static void main(String[] args) {}
@@ -36,7 +37,8 @@
     }
   }
 
-  private synchronized static void throwException(String message) {
+  @NeverInline
+  private static void throwException(String message) {
     throw new RuntimeException(message);
   }
 }