Revert "Enable new argument propagation"
This reverts commit be44fc3a0865ebe9902eda5711d0f9b1e413b368.
Reason for revert: Possible nondeterminism
Change-Id: I44f6ba518897a68f0d70d8b9f0c0ffe658de150a
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 4a6a664..2a44d85 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -1219,7 +1219,7 @@
// TODO(b/69963623): enable if everything is ready, including signature rewriting at call sites.
private boolean enableLegacyConstantPropagation = false;
- private boolean enableExperimentalArgumentPropagation = true;
+ private boolean enableExperimentalArgumentPropagation = false;
private boolean enableDynamicTypePropagation = true;
public void disableOptimization() {
@@ -1255,7 +1255,7 @@
}
public CallSiteOptimizationOptions setEnableLegacyConstantPropagation() {
- assert !enableLegacyConstantPropagation;
+ assert !isConstantPropagationEnabled();
enableLegacyConstantPropagation = true;
return this;
}
diff --git a/src/test/examples/shaking14/KeepConstantArguments.java b/src/test/examples/shaking14/KeepConstantArguments.java
deleted file mode 100644
index 0ff3910..0000000
--- a/src/test/examples/shaking14/KeepConstantArguments.java
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2021, 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 shaking14;
-
-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.METHOD})
-public @interface KeepConstantArguments {}
diff --git a/src/test/examples/shaking14/Subclass.java b/src/test/examples/shaking14/Subclass.java
index 2cb520a..31dd650 100644
--- a/src/test/examples/shaking14/Subclass.java
+++ b/src/test/examples/shaking14/Subclass.java
@@ -4,13 +4,10 @@
package shaking14;
public class Subclass extends Superclass {
-
- @KeepConstantArguments
static int aMethod(int value) {
return value + 42;
}
- @KeepConstantArguments
static double anotherMethod(double value) {
return value + 42;
}
diff --git a/src/test/examples/shaking14/keep-rules.txt b/src/test/examples/shaking14/keep-rules.txt
index 594e244..94682a3 100644
--- a/src/test/examples/shaking14/keep-rules.txt
+++ b/src/test/examples/shaking14/keep-rules.txt
@@ -10,4 +10,3 @@
# allow access modification to enable minifcation
-allowaccessmodification
--keepconstantarguments class * { @shaking14.KeepConstantArguments *; }
diff --git a/src/test/java/com/android/tools/r8/KeepConstantArguments.java b/src/test/java/com/android/tools/r8/KeepConstantArguments.java
index 132b92d..87edb4f 100644
--- a/src/test/java/com/android/tools/r8/KeepConstantArguments.java
+++ b/src/test/java/com/android/tools/r8/KeepConstantArguments.java
@@ -4,10 +4,7 @@
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})
+@Target({ElementType.METHOD})
public @interface KeepConstantArguments {}
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index 188f23f..c81cdfc 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -1287,16 +1287,8 @@
private static Map<String, List<String>> keepRules =
ImmutableMap.of(
- "021-string2",
- ImmutableList.of("-dontwarn junit.framework.**"),
- "082-inline-execute",
- ImmutableList.of("-dontwarn junit.framework.**"),
- // Constructor MakeBoundType.<init>(int) is called using reflection.
- "476-checker-ctor-fence-redun-elim",
- ImmutableList.of(
- "-keep class TestDontOptimizeAcrossEscape$MakeBoundTypeTest$MakeBoundType {",
- " void <init>(int);",
- "}"));
+ "021-string2", ImmutableList.of("-dontwarn junit.framework.**"),
+ "082-inline-execute", ImmutableList.of("-dontwarn junit.framework.**"));
private static Map<String, Consumer<InternalOptions>> configurations =
ImmutableMap.of(
diff --git a/src/test/java/com/android/tools/r8/R8RunExamplesAndroidOTest.java b/src/test/java/com/android/tools/r8/R8RunExamplesAndroidOTest.java
index 08dd682..fb37493 100644
--- a/src/test/java/com/android/tools/r8/R8RunExamplesAndroidOTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunExamplesAndroidOTest.java
@@ -120,7 +120,7 @@
.withOptionConsumer(opts -> opts.enableClassInlining = false)
.withBuilderTransformation(
b -> b.addProguardConfiguration(PROGUARD_OPTIONS, Origin.unknown()))
- .withDexCheck(inspector -> checkLambdaCount(inspector, 9, "lambdadesugaring"))
+ .withDexCheck(inspector -> checkLambdaCount(inspector, 10, "lambdadesugaring"))
.run();
test("lambdadesugaring", "lambdadesugaring", "LambdaDesugaring")
@@ -159,7 +159,7 @@
.withOptionConsumer(opts -> opts.enableClassInlining = false)
.withBuilderTransformation(
b -> b.addProguardConfiguration(PROGUARD_OPTIONS, Origin.unknown()))
- .withDexCheck(inspector -> checkLambdaCount(inspector, 9, "lambdadesugaring"))
+ .withDexCheck(inspector -> checkLambdaCount(inspector, 10, "lambdadesugaring"))
.run();
test("lambdadesugaring", "lambdadesugaring", "LambdaDesugaring")
@@ -204,7 +204,7 @@
b ->
b.addProguardConfiguration(
getProguardOptionsNPlus(enableProguardCompatibilityMode), Origin.unknown()))
- .withDexCheck(inspector -> checkLambdaCount(inspector, 3, "lambdadesugaringnplus"))
+ .withDexCheck(inspector -> checkLambdaCount(inspector, 2, "lambdadesugaringnplus"))
.run();
}
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 6bf8cf9..8cd7860 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/NonConstructorRelaxationTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/NonConstructorRelaxationTest.java
@@ -78,7 +78,6 @@
R8TestRunResult result =
testForR8(parameters.getBackend())
.addProgramFiles(ToolHelper.getClassFilesForTestPackage(mainClass.getPackage()))
- .enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.enableNoHorizontalClassMergingAnnotations()
.enableMemberValuePropagationAnnotations()
@@ -163,7 +162,6 @@
.addProgramFiles(ToolHelper.getClassFilesForTestPackage(mainClass.getPackage()))
.addKeepMainRule(mainClass)
.addOptionsModification(o -> o.enableVerticalClassMerging = enableVerticalClassMerging)
- .enableConstantArgumentAnnotations()
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.enableMemberValuePropagationAnnotations()
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 7974306..c832fe7 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,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.accessrelaxation.privateinstance;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoHorizontalClassMerging;
@@ -17,7 +16,6 @@
return "Sub1::foo1()";
}
- @KeepConstantArguments
@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 6e8d5f7..ffdeec6 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,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.accessrelaxation.privateinstance;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoHorizontalClassMerging;
@@ -17,7 +16,6 @@
return "Sub2::foo2()";
}
- @KeepConstantArguments
@NeverInline
private String bar1(int i) {
return "Sub2::bar1(" + i + ")";
@@ -27,7 +25,6 @@
return bar1(1);
}
- @KeepConstantArguments
@NeverInline
private String bar2(int i) {
return "Sub2::bar2(" + i + ")";
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/privatestatic/A.java b/src/test/java/com/android/tools/r8/accessrelaxation/privatestatic/A.java
index a0c3330..a05f41f 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/privatestatic/A.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/privatestatic/A.java
@@ -4,7 +4,6 @@
package com.android.tools.r8.accessrelaxation.privatestatic;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NeverPropagateValue;
@@ -43,7 +42,6 @@
return bar(1);
}
- @KeepConstantArguments
@NeverInline
@NeverPropagateValue
private static String blah(int i) {
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/privatestatic/BB.java b/src/test/java/com/android/tools/r8/accessrelaxation/privatestatic/BB.java
index d458af8..a6c40ff 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/privatestatic/BB.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/privatestatic/BB.java
@@ -4,15 +4,12 @@
package com.android.tools.r8.accessrelaxation.privatestatic;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NeverPropagateValue;
import com.android.tools.r8.NoHorizontalClassMerging;
@NoHorizontalClassMerging
public class BB extends A {
-
- @KeepConstantArguments
@NeverInline
@NeverPropagateValue
private static String blah(int i) {
diff --git a/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfHigherApiLevelInterfaceTest.java b/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfHigherApiLevelInterfaceTest.java
index bdaf09d..602f4a1 100644
--- a/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfHigherApiLevelInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfHigherApiLevelInterfaceTest.java
@@ -7,7 +7,6 @@
import static com.android.tools.r8.apimodel.ApiModelingTestHelper.setMockApiLevelForMethod;
import static com.android.tools.r8.apimodel.ApiModelingTestHelper.verifyThat;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.TestBase;
@@ -45,7 +44,6 @@
.addDefaultRuntimeLibrary(parameters)
.setMinApi(parameters.getApiLevel())
.addKeepMainRule(Main.class)
- .enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.enableNoHorizontalClassMergingAnnotations()
.apply(setMockApiLevelForMethod(apiMethod, AndroidApiLevel.L_MR1))
@@ -65,7 +63,6 @@
@NoHorizontalClassMerging
public static class ApiCaller {
- @KeepConstantArguments
public static void callInterfaceMethod(Api api) {
System.out.println("ApiCaller::callInterfaceMethod");
if (api != null) {
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java b/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java
index 1790724..07ad8f0 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java
@@ -8,7 +8,6 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -94,7 +93,6 @@
ClassBuilder cls1 = jasminBuilder.addClass("Cls1", absCls.name, itf1.name);
// Mimic Kotlin's "internal" class
cls1.setAccess("");
- cls1.addRuntimeInvisibleAnnotation(KeepConstantArguments.class.getTypeName());
cls1.addBridgeMethod("foo", ImmutableList.of("Ljava/lang/String;"), "V",
".limit stack 2",
".limit locals 2",
@@ -145,7 +143,6 @@
.addProgramClassFileData(jasminBuilder.buildClasses())
.addKeepMainRule(mainClass.name)
.addOptionsModification(this::configure)
- .enableConstantArgumentAnnotations()
.noHorizontalClassMerging(cls2Class.name)
.noMinification()
.setMinApi(parameters.getApiLevel())
@@ -242,7 +239,6 @@
"return");
ClassBuilder cls2 = jasminBuilder.addClass("DerivedString", baseCls.name);
- cls2.addRuntimeInvisibleAnnotation(KeepConstantArguments.class.getTypeName());
cls2.addVirtualMethod("bar", ImmutableList.of("Ljava/lang/String;"), "V",
".limit stack 2",
".limit locals 2",
@@ -276,7 +272,6 @@
.addProgramClassFileData(jasminBuilder.buildClasses())
.addKeepMainRule(mainClass.name)
.addOptionsModification(this::configure)
- .enableConstantArgumentAnnotations()
.noHorizontalClassMerging(derivedIntegerClass.name)
.noMinification()
.setMinApi(parameters.getApiLevel())
@@ -352,7 +347,6 @@
"return");
ClassBuilder subCls = jasminBuilder.addClass("DerivedString", baseCls.name);
- subCls.addRuntimeInvisibleAnnotation(KeepConstantArguments.class.getTypeName());
subCls.addVirtualMethod("bar", ImmutableList.of("Ljava/lang/String;"), "V",
".limit stack 2",
".limit locals 2",
@@ -387,7 +381,6 @@
.addProgramClassFileData(jasminBuilder.buildClasses())
.addKeepMainRule(mainClass.name)
.addOptionsModification(this::configure)
- .enableConstantArgumentAnnotations()
.noMinification()
.setMinApi(parameters.getApiLevel())
.compile()
@@ -440,7 +433,6 @@
"aload_1",
"invokevirtual java/io/PrintStream/print(Ljava/lang/Object;)V",
"return");
- cls.addRuntimeInvisibleAnnotation(KeepConstantArguments.class.getTypeName());
cls.addVirtualMethod("bar", ImmutableList.of("Ljava/lang/String;"), "V",
".limit stack 2",
".limit locals 2",
@@ -475,7 +467,6 @@
.addProgramClassFileData(jasminBuilder.buildClasses())
.addKeepMainRule(mainClass.name)
.addOptionsModification(this::configure)
- .enableConstantArgumentAnnotations()
.noMinification()
.setMinApi(parameters.getApiLevel())
.compile()
@@ -504,6 +495,7 @@
// Callees are invoked with a simple constant, e.g., "Bar". Propagating it into the callees
// bothers what the tests want to check, such as exact instructions in the body that include
// invocation kinds, like virtual call to a bridge.
+ assert !options.callSiteOptimizationOptions().isConstantPropagationEnabled();
// Disable inlining to avoid the (short) tested method from being inlined and then removed.
options.enableInlining = false;
}
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeHoistingAccessibilityTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeHoistingAccessibilityTest.java
index 45855d8..81c5c04 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeHoistingAccessibilityTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeHoistingAccessibilityTest.java
@@ -6,7 +6,6 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.MatcherAssert.assertThat;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoVerticalClassMerging;
@@ -72,7 +71,6 @@
int.class))
.transform())
.addKeepMainRule(TestClass.class)
- .enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.enableNoHorizontalClassMergingAnnotations()
.enableNoVerticalClassMergingAnnotations()
@@ -121,7 +119,6 @@
// This bridge cannot be hoisted to A, since it would then become inaccessible to the call site
// in TestClass.main().
- @KeepConstantArguments
@NeverInline
/*bridge*/ String bridgeB(Object o) {
return (String) m((String) o);
@@ -134,7 +131,6 @@
// This bridge is invoked from another package. However, this does not prevent us from hoisting
// the bridge to B, although B is not public, since users from outside this package can still
// access bridgeC() via class C. From B, the bridge can be hoisted again to A.
- @KeepConstantArguments
@NeverInline
public /*bridge*/ String bridgeC(Object o) {
return (String) m((String) o);
@@ -146,7 +142,6 @@
// This bridge cannot be hoisted to A, since it would then become inaccessible to the call site
// in TestClass.main().
- @KeepConstantArguments
@NeverInline
/*bridge*/ String bridgeB(Object o, int a, int b, int c, int d, int e) {
return (String) m((String) o, a, b, c, d, e);
@@ -159,7 +154,6 @@
// This bridge is invoked from another package. However, this does not prevent us from hoisting
// the bridge to B, although B is not public, since users from outside this package can still
// access bridgeC() via class C. From B, the bridge can be hoisted again to A.
- @KeepConstantArguments
@NeverInline
public /*bridge*/ String bridgeC(Object o, int a, int b, int c, int d, int e) {
return (String) m((String) o, a, b, c, d, e);
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/FinalBridgeHoistingTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/FinalBridgeHoistingTest.java
index bf958f8..de2e041 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/FinalBridgeHoistingTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/FinalBridgeHoistingTest.java
@@ -7,7 +7,6 @@
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
@@ -43,7 +42,6 @@
.transform())
.addKeepMainRule(TestClass.class)
.addKeepClassAndMembersRules(B1.class)
- .enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.setMinApi(parameters.getApiLevel())
@@ -87,7 +85,6 @@
@NeverClassInline
static class B1 extends A {
- @KeepConstantArguments
public String virtualBridge(Object o) {
return (String) m((String) o);
}
@@ -96,7 +93,6 @@
@NeverClassInline
static class B2 extends A {
- @KeepConstantArguments
@NeverInline
public final /*bridge*/ String virtualBridge(Object o) {
return (String) m((String) o);
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonSuperclassBridgeHoistingTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonSuperclassBridgeHoistingTest.java
index e987a43..f2a91a8 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonSuperclassBridgeHoistingTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonSuperclassBridgeHoistingTest.java
@@ -7,7 +7,6 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertFalse;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoVerticalClassMerging;
@@ -43,7 +42,6 @@
.setBridge(B.class.getDeclaredMethod("bridge", Object.class))
.transform())
.addKeepMainRule(TestClass.class)
- .enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.enableNoVerticalClassMergingAnnotations()
.enableNeverClassInliningAnnotations()
@@ -78,7 +76,6 @@
@NeverClassInline
static class B extends A {
- @KeepConstantArguments
@NeverInline
public Object m(String arg) {
return System.currentTimeMillis() >= 0 ? arg : null;
@@ -86,7 +83,6 @@
// This bridge cannot be hoisted to A, since it targets a method on the enclosing class.
// Hoisting the bridge to A would lead to a NoSuchMethodError.
- @KeepConstantArguments
@NeverInline
public /*bridge*/ String bridge(Object o) {
return (String) m((String) o);
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/PositiveBridgeHoistingTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/PositiveBridgeHoistingTest.java
index ae77a45..dbdb906 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/PositiveBridgeHoistingTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/PositiveBridgeHoistingTest.java
@@ -7,7 +7,6 @@
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoHorizontalClassMerging;
@@ -52,7 +51,6 @@
.setBridge(B5.class.getDeclaredMethod("virtualBridge", Object.class))
.transform())
.addKeepMainRule(TestClass.class)
- .enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.enableNoHorizontalClassMergingAnnotations()
@@ -108,7 +106,6 @@
static class A {
- @KeepConstantArguments
@NeverInline
public Object m(String arg) {
return System.currentTimeMillis() >= 0 ? arg : null;
@@ -125,14 +122,12 @@
// This bridge can be hoisted to A if the invoke-super instruction is rewritten to an
// invoke-virtual instruction.
- @KeepConstantArguments
@NeverInline
public /*bridge*/ String superBridge(Object o) {
return (String) super.m((String) o);
}
// This bridge can be hoisted to A.
- @KeepConstantArguments
@NeverInline
public /*bridge*/ String virtualBridge(Object o) {
return (String) m((String) o);
@@ -144,14 +139,12 @@
static class B2 extends A {
// By hoisting B1.superBridge() to A this method bridge redundant.
- @KeepConstantArguments
@NeverInline
public /*bridge*/ String superBridge(Object o) {
return (String) super.m((String) o);
}
// By hoisting B1.virtualBridge() to A this method bridge redundant.
- @KeepConstantArguments
@NeverInline
public /*bridge*/ String virtualBridge(Object o) {
return (String) m((String) o);
@@ -178,13 +171,11 @@
@NoHorizontalClassMerging
static class B4 extends A {
- @KeepConstantArguments
@NeverInline
public String superBridge(Object o) {
return System.currentTimeMillis() >= 0 ? ((String) o) : null;
}
- @KeepConstantArguments
@NeverInline
public String virtualBridge(Object o) {
return System.currentTimeMillis() >= 0 ? ((String) o) : null;
@@ -197,13 +188,11 @@
@NoHorizontalClassMerging
static class B5 extends A {
- @KeepConstantArguments
@NeverInline
public /*bridge*/ String superBridge(Object o) {
return (String) super.m2((String) o);
}
- @KeepConstantArguments
@NeverInline
public /*bridge*/ String virtualBridge(Object o) {
return (String) m2((String) o);
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/testclasses/BridgeHoistingAccessibilityTestClasses.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/testclasses/BridgeHoistingAccessibilityTestClasses.java
index 64c19e5..e7d430f 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/testclasses/BridgeHoistingAccessibilityTestClasses.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/testclasses/BridgeHoistingAccessibilityTestClasses.java
@@ -4,7 +4,6 @@
package com.android.tools.r8.bridgeremoval.hoisting.testclasses;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.NoVerticalClassMerging;
@@ -34,7 +33,6 @@
@NoVerticalClassMerging
public static class AWithRangedInvoke {
- @KeepConstantArguments
@NeverInline
public Object m(String arg, int a, int b, int c, int d, int e) {
return System.currentTimeMillis() > 0 ? arg + a + b + c + d + e : null;
diff --git a/src/test/java/com/android/tools/r8/classmerging/StatefulSingletonClassesMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/StatefulSingletonClassesMergingTest.java
index 3f887af..fadf934 100644
--- a/src/test/java/com/android/tools/r8/classmerging/StatefulSingletonClassesMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/StatefulSingletonClassesMergingTest.java
@@ -4,7 +4,6 @@
package com.android.tools.r8.classmerging;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NeverPropagateValue;
@@ -36,7 +35,6 @@
.addKeepMainRule(Main.class)
.addHorizontallyMergedClassesInspector(
inspector -> inspector.assertIsCompleteMergeGroup(A.class, B.class))
- .enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.enableMemberValuePropagationAnnotations()
.enableNeverClassInliningAnnotations()
@@ -60,9 +58,6 @@
@NeverPropagateValue private final String data;
- // TODO(b/198758663): With argument propagation the constructors end up not being equivalent,
- // which prevents merging in the final round of horizontal class merging.
- @KeepConstantArguments
A(String data) {
this.data = data;
}
@@ -80,9 +75,6 @@
@NeverPropagateValue private final String data;
- // TODO(b/198758663): With argument propagation the constructors end up not being equivalent,
- // which prevents merging in the final round of horizontal class merging.
- @KeepConstantArguments
B(String data) {
this.data = data;
}
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/NoClassesOrMembersWithAnnotationsTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/NoClassesOrMembersWithAnnotationsTest.java
index 667c261..3858a1e 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/NoClassesOrMembersWithAnnotationsTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/NoClassesOrMembersWithAnnotationsTest.java
@@ -9,7 +9,6 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.onlyIf;
import static org.hamcrest.MatcherAssert.assertThat;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestParameters;
@@ -53,13 +52,18 @@
} else {
inspector.assertIsCompleteMergeGroup(A.class, B.class, C.class);
}
- inspector.assertNoOtherClassesMerged();
})
- .enableConstantArgumentAnnotations()
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.setMinApi(parameters.getApiLevel())
- .compile()
+ .run(parameters.getRuntime(), Main.class)
+ .applyIf(
+ enableProguardCompatibilityMode,
+ result ->
+ result.assertSuccessWithOutputLines(
+ "a", "b", "c", "foo", "null", "annotation 2", "annotation 1", "annotation 2"),
+ result ->
+ result.assertSuccessWithOutputLines("a", "b", "c", "foo", "null", "annotation 2"))
.inspect(
codeInspector -> {
assertThat(codeInspector.clazz(TypeAnnotation.class), isPresent());
@@ -69,15 +73,7 @@
codeInspector.clazz(B.class),
onlyIf(enableProguardCompatibilityMode, isPresent()));
assertThat(codeInspector.clazz(C.class), isAbsent());
- })
- .run(parameters.getRuntime(), Main.class)
- .applyIf(
- enableProguardCompatibilityMode,
- result ->
- result.assertSuccessWithOutputLines(
- "a", "b", "c", "foo", "null", "annotation 2", "annotation 1", "annotation 2"),
- result ->
- result.assertSuccessWithOutputLines("a", "b", "c", "foo", "null", "annotation 2"));
+ });
}
@Retention(RetentionPolicy.RUNTIME)
@@ -118,7 +114,6 @@
}
static class Main {
- @KeepConstantArguments
@NeverInline
public static void foo(TypeAnnotation annotation) {
System.out.println(annotation);
@@ -129,7 +124,7 @@
System.out.println(annotation.toString().replaceFirst(".*@.*", "annotation 2"));
}
- public static void main(String[] args) {
+ public static void main(String[] args) throws NoSuchMethodException {
A a = new A();
B b = new B("b");
C c = new C("c");
diff --git a/src/test/java/com/android/tools/r8/compatproguard/reflection/ReflectionTest.java b/src/test/java/com/android/tools/r8/compatproguard/reflection/ReflectionTest.java
index 352186b..aab82f0 100644
--- a/src/test/java/com/android/tools/r8/compatproguard/reflection/ReflectionTest.java
+++ b/src/test/java/com/android/tools/r8/compatproguard/reflection/ReflectionTest.java
@@ -8,7 +8,6 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.R8Command;
import com.android.tools.r8.TestBase;
@@ -157,7 +156,6 @@
nonConstArraySize(0);
}
- @KeepConstantArguments
@NeverInline
static void nonConstArraySize(int argumentTypesSize) {
try {
@@ -487,23 +485,28 @@
@Test
public void testNonConstArraySize() throws Exception {
- testForR8(backend)
- .addProgramClasses(MainNonConstArraySize.class, A.class)
- .addKeepMainRule(MainNonConstArraySize.class)
- .enableConstantArgumentAnnotations()
- .enableInliningAnnotations()
- .run(MainNonConstArraySize.class)
- .inspect(
- inspector -> {
- assertThat(
- inspector.clazz(A.class).method("void", "method0", ImmutableList.of()),
- isPresentAndRenamed());
- })
- // The reference run on the Java VM will succeed, whereas the run on the R8 output will fail
- // as in this test we fail to recognize the reflective call. To compare the output of the
- // successful reference run append "java.lang.NoSuchMethodException" to it.
- .assertSuccessWithOutput(
- runOnJava(MainNonConstArraySize.class) + "java.lang.NoSuchMethodException");
+ Class<?> mainClass = MainNonConstArraySize.class;
+ R8Command.Builder builder =
+ ToolHelper.prepareR8CommandBuilder(
+ readClasses(A.class, mainClass, NeverInline.class), emptyConsumer(backend))
+ .addLibraryFiles(runtimeJar(backend));
+ builder.addProguardConfiguration(
+ ImmutableList.of(keepMainProguardConfigurationWithInliningAnnotation(mainClass)),
+ Origin.unknown());
+ ToolHelper.allowTestProguardOptions(builder);
+ AndroidApp output = ToolHelper.runR8(builder.build());
+ CodeInspector inspector = new CodeInspector(output);
+
+ assertThat(
+ inspector.clazz(A.class).method("void", "method0", ImmutableList.of()),
+ isPresentAndRenamed());
+
+ // The reference run on the Java VM will succeed, whereas the run on the R8 output will fail
+ // as in this test we fail to recognize the reflective call. To compare the output of the
+ // successful reference run append "java.lang.NoSuchMethodException" to it.
+ assertEquals(
+ runOnJava(mainClass) + "java.lang.NoSuchMethodException",
+ runOnVM(output, mainClass, backend));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaUtilFunctionTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaUtilFunctionTest.java
index 2e0481d..0ac3687 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaUtilFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaUtilFunctionTest.java
@@ -8,7 +8,6 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
@@ -90,7 +89,6 @@
.addKeepMainRule(TestClass.class)
.addInnerClasses(JavaUtilFunctionTest.class)
.setMinApi(parameters.getApiLevel())
- .enableConstantArgumentAnnotations()
.enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
.inspect(this::checkRewrittenArguments)
@@ -105,7 +103,6 @@
static class TestClass {
- @KeepConstantArguments
@NeverInline
private static String applyFunction(Function<String, String> f) {
return f.apply("Hello, world");
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/VirtualMethodOverrideEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/VirtualMethodOverrideEnumUnboxingTest.java
index 093f902..4c69310 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/VirtualMethodOverrideEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/VirtualMethodOverrideEnumUnboxingTest.java
@@ -8,7 +8,6 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertFalse;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoVerticalClassMerging;
@@ -46,7 +45,6 @@
.addInnerClasses(getClass())
.addKeepMainRule(TestClass.class)
.addKeepRules(enumKeepRules.getKeepRules())
- .enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.enableNoVerticalClassMergingAnnotations()
@@ -91,13 +89,11 @@
@NeverClassInline
static class B extends A {
- @KeepConstantArguments
@NeverInline
void m(int x, MyEnum y) {
System.out.println("B.m(" + x + " : int, " + y.toString() + " : MyEnum)");
}
- @KeepConstantArguments
@NeverInline
@Override
void m(MyEnum x, int y) {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/WithStaticizerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/WithStaticizerTest.java
index f392b1d..3c7307c 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/WithStaticizerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/WithStaticizerTest.java
@@ -4,9 +4,9 @@
package com.android.tools.r8.ir.optimize.callsites;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static junit.framework.TestCase.assertTrue;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertTrue;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlinerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlinerTest.java
index cb494cb..9cb52da 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlinerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlinerTest.java
@@ -240,7 +240,7 @@
SingleTestRunResult<?> result =
testForR8(parameters.getBackend())
.addProgramClasses(classes)
- .enableConstantArgumentAnnotations()
+ .enableProguardTestOptions()
.enableInliningAnnotations()
.enableNoHorizontalClassMergingAnnotations()
.addKeepMainRule(main)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/invalidroot/InvalidRootsTestClass.java b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/invalidroot/InvalidRootsTestClass.java
index d9785fe..2b29cea 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/invalidroot/InvalidRootsTestClass.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/invalidroot/InvalidRootsTestClass.java
@@ -4,7 +4,6 @@
package com.android.tools.r8.ir.optimize.classinliner.invalidroot;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoHorizontalClassMerging;
@@ -73,7 +72,6 @@
}
}
- @KeepConstantArguments
private void neverReturnsNormallyExtra(String prefix, NeverReturnsNormally a) {
throw new RuntimeException("neverReturnsNormallyExtra(" +
prefix + ", " + (a == null ? "null" : a.foo()) + "): " + next());
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/NopInliningConstraintTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/NopInliningConstraintTest.java
index dcc572b..3295203 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/NopInliningConstraintTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/NopInliningConstraintTest.java
@@ -40,8 +40,6 @@
.addKeepMainRule(Main.class)
.enableAlwaysInliningAnnotations()
.enableInliningAnnotations()
- // TODO(b/173398086): uniqueMethodWithName() does not work with argument removal.
- .noMinification()
.setMinApi(parameters.getApiLevel())
.compile()
.inspect(
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SimpleIfNullOrNotNullInliningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SimpleIfNullOrNotNullInliningTest.java
index f75c4c8..c5073c5 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SimpleIfNullOrNotNullInliningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SimpleIfNullOrNotNullInliningTest.java
@@ -10,7 +10,6 @@
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverSingleCallerInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -52,7 +51,6 @@
.addProgramClasses(mainClass, TestMethods.class)
.addKeepMainRule(mainClass)
.apply(this::configure)
- .enableConstantArgumentAnnotations()
.enableNeverSingleCallerInlineAnnotations()
.compile()
.inspect(this::inspect)
@@ -118,7 +116,6 @@
static class TestMethods {
- @KeepConstantArguments
@NeverSingleCallerInline
static void simpleIfNullTest(Object o) {
if (o == null) {
@@ -138,7 +135,6 @@
System.out.println("!");
}
- @KeepConstantArguments
@NeverSingleCallerInline
static void simpleIfBothNullTest(Object o1, Object o2) {
if (o1 == null && o2 == null) {
@@ -158,7 +154,6 @@
System.out.println("!");
}
- @KeepConstantArguments
@NeverSingleCallerInline
static void simpleIfNotNullTest(Object o) {
if (o != null) {
@@ -178,7 +173,6 @@
System.out.println("!");
}
- @KeepConstantArguments
@NeverSingleCallerInline
static void simpleIfBothNotNullTest(Object o1, Object o2) {
if (o1 != null && o2 != null) {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SimpleIfTrueOrFalseInliningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SimpleIfTrueOrFalseInliningTest.java
index 180b971..b7a7186 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SimpleIfTrueOrFalseInliningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SimpleIfTrueOrFalseInliningTest.java
@@ -10,7 +10,6 @@
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverSingleCallerInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -52,7 +51,6 @@
.addProgramClasses(mainClass, TestMethods.class)
.addKeepMainRule(mainClass)
.apply(this::configure)
- .enableConstantArgumentAnnotations()
.enableNeverSingleCallerInlineAnnotations()
.compile()
.inspect(this::inspect)
@@ -116,7 +114,6 @@
static class TestMethods {
- @KeepConstantArguments
@NeverSingleCallerInline
static void simpleIfTrueTest(boolean b) {
if (b) {
@@ -136,7 +133,6 @@
System.out.println("!");
}
- @KeepConstantArguments
@NeverSingleCallerInline
static void simpleIfBothTrueTest(boolean b1, boolean b2) {
if (b1 && b2) {
@@ -156,7 +152,6 @@
System.out.println("!");
}
- @KeepConstantArguments
@NeverSingleCallerInline
static void simpleIfFalseTest(boolean b) {
if (!b) {
@@ -176,7 +171,6 @@
System.out.println("!");
}
- @KeepConstantArguments
@NeverSingleCallerInline
static void simpleIfBothFalseTest(boolean b1, boolean b2) {
if (!b1 && !b2) {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/InstanceOfRemovalTest.java b/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/InstanceOfRemovalTest.java
index 09aef4c..791bbae 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/InstanceOfRemovalTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/InstanceOfRemovalTest.java
@@ -177,6 +177,6 @@
MethodSubject barMethodSubject = testClass.uniqueMethodWithName("bar");
Iterator<InstructionSubject> barInstructionIterator =
barMethodSubject.iterateInstructions(InstructionSubject::isInstanceOf);
- assertEquals(2, Streams.stream(barInstructionIterator).count());
+ assertEquals(4, Streams.stream(barInstructionIterator).count());
}
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/classtypes/B134462736.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/classtypes/B134462736.java
index 3a0b304..29de662 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/classtypes/B134462736.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/classtypes/B134462736.java
@@ -7,7 +7,6 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.MatcherAssert.assertThat;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -65,7 +64,6 @@
.enableInliningAnnotations()
.addInnerClasses(B134462736.class)
.addKeepMainRule(TestClass.class)
- .enableConstantArgumentAnnotations()
.setMinApi(parameters.getApiLevel())
.noMinification()
.addOptionsModification(
@@ -80,14 +78,11 @@
}
public static class TestClass {
-
- @KeepConstantArguments
@NeverInline
public void consumer(String arg1, String arg2) {
System.out.println(arg1 + " " + arg2);
}
- @KeepConstantArguments
@NeverInline
public void method1(StringBuilder builder, String arg1, String arg2) {
builder.append(arg1);
@@ -95,7 +90,6 @@
consumer(builder.toString(), null);
}
- @KeepConstantArguments
@NeverInline
public void method2(StringBuilder builder, String arg1, String arg2) {
builder.append(arg1);
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/primitivetypes/PrimitiveTypesTest.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/primitivetypes/PrimitiveTypesTest.java
index 8cc3b8c..e384d9b 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/primitivetypes/PrimitiveTypesTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/primitivetypes/PrimitiveTypesTest.java
@@ -5,23 +5,20 @@
package com.android.tools.r8.ir.optimize.outliner.primitivetypes;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static junit.framework.TestCase.assertEquals;
import static org.hamcrest.MatcherAssert.assertThat;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverClassInline;
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.synthesis.SyntheticItemsTestUtils;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.CodeMatchers;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -29,30 +26,18 @@
@RunWith(Parameterized.class)
public class PrimitiveTypesTest extends TestBase {
- private final boolean enableArgumentPropagation;
private final TestParameters parameters;
- @Parameterized.Parameters(name = "{1}, argument propagation: {0}")
- public static List<Object[]> data() {
- return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ @Parameterized.Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- public PrimitiveTypesTest(boolean keepConstantArguments, TestParameters parameters) {
- this.enableArgumentPropagation = keepConstantArguments;
+ public PrimitiveTypesTest(TestParameters parameters) {
this.parameters = parameters;
}
private void validateOutlining(CodeInspector inspector, Class<?> testClass, String argumentType) {
- boolean isStringBuilderOptimized =
- enableArgumentPropagation
- && parameters.isDexRuntime()
- && (argumentType.equals("char") || argumentType.equals("boolean"));
- if (isStringBuilderOptimized) {
- assertEquals(1, inspector.allClasses().size());
- return;
- }
-
ClassSubject outlineClass =
inspector.clazz(SyntheticItemsTestUtils.syntheticOutlineClass(testClass, 0));
MethodSubject outline0Method =
@@ -71,8 +56,6 @@
public void runTest(Class<?> testClass, String argumentType, String expectedOutput)
throws Exception {
testForR8(parameters.getBackend())
- .addConstantArgumentAnnotations()
- .enableConstantArgumentAnnotations(!enableArgumentPropagation)
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.addProgramClasses(testClass)
@@ -137,7 +120,6 @@
static class TestClassBoolean {
- @KeepConstantArguments
@NeverInline
public static String method1(boolean b) {
StringBuilder sb = new StringBuilder();
@@ -146,7 +128,6 @@
return sb.toString();
}
- @KeepConstantArguments
@NeverInline
public static String method2(boolean b) {
StringBuilder sb = new StringBuilder();
@@ -163,7 +144,6 @@
static class TestClassByte {
- @KeepConstantArguments
@NeverInline
public static String method1(byte b) {
MyStringBuilder sb = new MyStringBuilder();
@@ -172,7 +152,6 @@
return sb.toString();
}
- @KeepConstantArguments
@NeverInline
public static String method2(byte b) {
MyStringBuilder sb = new MyStringBuilder();
@@ -189,7 +168,6 @@
static class TestClassShort {
- @KeepConstantArguments
@NeverInline
public static String method1(short s) {
MyStringBuilder sb = new MyStringBuilder();
@@ -198,7 +176,6 @@
return sb.toString();
}
- @KeepConstantArguments
@NeverInline
public static String method2(short s) {
MyStringBuilder sb = new MyStringBuilder();
@@ -215,7 +192,6 @@
static class TestClassChar {
- @KeepConstantArguments
@NeverInline
public static String method1(char c) {
StringBuilder sb = new StringBuilder();
@@ -224,7 +200,6 @@
return sb.toString();
}
- @KeepConstantArguments
@NeverInline
public static String method2(char c) {
StringBuilder sb = new StringBuilder();
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 a1b6f08..5a60806 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
@@ -410,7 +410,6 @@
R8TestRunResult result =
testForR8(parameters.getBackend())
.addProgramClasses(classes)
- .enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.addKeepMainRule(main)
.allowAccessModification()
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/dualcallinline/Candidate.java b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/dualcallinline/Candidate.java
index 4733ab3..9ccd630 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/dualcallinline/Candidate.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/dualcallinline/Candidate.java
@@ -4,7 +4,6 @@
package com.android.tools.r8.ir.optimize.staticizer.dualcallinline;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
public class Candidate {
@@ -13,7 +12,6 @@
return bar("Candidate::foo()");
}
- @KeepConstantArguments
@NeverInline
public String bar(String other) {
return "Candidate::bar(" + other + ")";
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/string/StringIsEmptyTest.java b/src/test/java/com/android/tools/r8/ir/optimize/string/StringIsEmptyTest.java
index 6c47b03..5c9c9a3 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/string/StringIsEmptyTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/string/StringIsEmptyTest.java
@@ -58,6 +58,7 @@
// This test wants to check if compile-time computation is not applied to non-null,
// non-constant value. In a simple test setting, call-site optimization knows the argument is
// always a non-null, specific constant, but that is beyond the scope of this test.
+ assert !options.callSiteOptimizationOptions().isConstantPropagationEnabled();
}
private void test(SingleTestRunResult result, int expectedStringIsEmptyCount) throws Exception {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/ParameterRewritingTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/ParameterRewritingTest.java
index ee595ce..0125189 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/ParameterRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/ParameterRewritingTest.java
@@ -11,8 +11,7 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.TestBase;
-import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
@@ -26,15 +25,15 @@
@RunWith(Parameterized.class)
public class ParameterRewritingTest extends TestBase {
- private final TestParameters parameters;
+ private final Backend backend;
- @Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimesAndApiLevels().build();
+ @Parameters(name = "Backend: {0}")
+ public static Backend[] data() {
+ return ToolHelper.getBackends();
}
- public ParameterRewritingTest(TestParameters parameters) {
- this.parameters = parameters;
+ public ParameterRewritingTest(Backend backend) {
+ this.backend = backend;
}
@Test
@@ -50,15 +49,14 @@
testForJvm().addTestClasspath().run(TestClass.class).assertSuccessWithOutput(expected);
CodeInspector inspector =
- testForR8(parameters.getBackend())
+ testForR8(backend)
.addInnerClasses(ParameterRewritingTest.class)
.addKeepMainRule(TestClass.class)
.enableInliningAnnotations()
.enableNoHorizontalClassMergingAnnotations()
.addOptionsModification(options -> options.enableClassInlining = false)
.noMinification()
- .setMinApi(parameters.getApiLevel())
- .run(parameters.getRuntime(), TestClass.class)
+ .run(TestClass.class)
.assertSuccessWithOutput(expected)
.inspector();
@@ -66,7 +64,7 @@
MethodSubject createStaticMethodSubject =
factoryClassSubject.uniqueMethodWithName("createStatic");
assertThat(createStaticMethodSubject, isPresent());
- assertEquals(1, createStaticMethodSubject.getMethod().getParameters().size());
+ assertEquals(1, createStaticMethodSubject.getMethod().getReference().proto.parameters.size());
for (int i = 1; i <= 3; ++i) {
String createStaticWithUnusedMethodName = "createStaticWithUnused" + i;
@@ -75,8 +73,8 @@
assertThat(createStaticWithUnusedMethodSubject, isPresent());
DexMethod method = createStaticWithUnusedMethodSubject.getMethod().getReference();
- assertEquals(1, method.getParameters().size());
- assertEquals("java.lang.String", method.getParameters().toString());
+ assertEquals(1, method.proto.parameters.size());
+ assertEquals("java.lang.String", method.proto.parameters.toString());
}
MethodSubject createStaticWithUnusedMethodSubject =
@@ -84,9 +82,9 @@
assertThat(createStaticWithUnusedMethodSubject, isPresent());
DexMethod method = createStaticWithUnusedMethodSubject.getMethod().getReference();
- assertEquals(3, method.getParameters().size());
+ assertEquals(3, method.proto.parameters.size());
assertEquals(
- "java.lang.String java.lang.String java.lang.String", method.getParameters().toString());
+ "java.lang.String java.lang.String java.lang.String", method.proto.parameters.toString());
assertThat(inspector.clazz(Uninstantiated.class), not(isPresent()));
}
@@ -94,39 +92,26 @@
static class TestClass {
public static void main(String[] args) {
- Object obj1 = Factory.createStatic(null, asNonConstantString("Factory.createStatic()"));
+ Object obj1 = Factory.createStatic(null, "Factory.createStatic()");
System.out.println(" -> " + obj1);
Object obj2 =
- Factory.createStaticWithUnused1(
- new Object(), null, asNonConstantString("Factory.createStaticWithUnused1()"));
+ Factory.createStaticWithUnused1(new Object(), null, "Factory.createStaticWithUnused1()");
System.out.println(" -> " + obj2);
Object obj3 =
- Factory.createStaticWithUnused2(
- null, new Object(), asNonConstantString("Factory.createStaticWithUnused2()"));
+ Factory.createStaticWithUnused2(null, new Object(), "Factory.createStaticWithUnused2()");
System.out.println(" -> " + obj3);
Object obj4 =
- Factory.createStaticWithUnused3(
- null, asNonConstantString("Factory.createStaticWithUnused3()"), new Object());
+ Factory.createStaticWithUnused3(null, "Factory.createStaticWithUnused3()", new Object());
System.out.println(" -> " + obj4);
Object obj5 =
Factory.createStaticWithUnused4(
- asNonConstantString("Factory"),
- new Object(),
- null,
- asNonConstantString("."),
- new Object(),
- null,
- asNonConstantString("createStaticWithUnused4()"));
+ "Factory", new Object(), null, ".", new Object(), null, "createStaticWithUnused4()");
System.out.println(" -> " + obj5);
}
-
- public static String asNonConstantString(String string) {
- return System.currentTimeMillis() > 0 ? string : null;
- }
}
@NoHorizontalClassMerging
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java
index 663bcf6..339bbbc 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java
@@ -158,14 +158,12 @@
static class TestClass {
public static void main(String[] args) {
- String hello = System.currentTimeMillis() > 0 ? "Hello" : null;
- String world = System.currentTimeMillis() > 0 ? " world!" : null;
- testRemoveStaticFromStart(null, hello, world);
- testRemoveStaticFromMiddle(hello, null, world);
- testRemoveStaticFromEnd(hello, world, null);
- new TestClass().testRemoveVirtualFromStart(null, hello, world);
- new TestClass().testRemoveVirtualFromMiddle(hello, null, world);
- new TestClass().testRemoveVirtualFromEnd(hello, world, null);
+ testRemoveStaticFromStart(null, "Hello", " world!");
+ testRemoveStaticFromMiddle("Hello", null, " world!");
+ testRemoveStaticFromEnd("Hello", " world!", null);
+ new TestClass().testRemoveVirtualFromStart(null, "Hello", " world!");
+ new TestClass().testRemoveVirtualFromMiddle("Hello", null, " world!");
+ new TestClass().testRemoveVirtualFromEnd("Hello", " world!", null);
}
@KeepConstantArguments
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java
index ed2d01d..b7ddd9e 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java
@@ -8,7 +8,6 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
@@ -61,7 +60,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(PrivateInstanceMethodCollisionTest.class)
.addKeepMainRule(TestClass.class)
- .enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.minification(minification)
@@ -111,13 +109,11 @@
@NeverClassInline
static class A {
- @KeepConstantArguments
@NeverInline
private void foo(String used) {
System.out.println("A#foo(" + used + ")");
}
- @KeepConstantArguments
@NeverInline
void foo(String used, Object unused) {
System.out.println("A#foo(" + used + ", Object)");
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java
index 2f3e14f..7cf6193 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java
@@ -8,7 +8,6 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.KeepUnusedArguments;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
@@ -67,7 +66,6 @@
.addKeepAttributes("RuntimeVisibleParameterAnnotations")
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
- .enableConstantArgumentAnnotations()
.enableUnusedArgumentAnnotations(keepUnusedArguments)
// TODO(b/123060011): Mapping not working in presence of unused argument removal.
.minification(keepUnusedArguments)
@@ -154,7 +152,6 @@
new TestClass().testRemoveVirtualFromEnd("Hello", " world!", null);
}
- @KeepConstantArguments
@KeepUnusedArguments
@NeverInline
static void testRemoveStaticFromStart(
@@ -162,7 +159,6 @@
System.out.println(used + otherUsed);
}
- @KeepConstantArguments
@KeepUnusedArguments
@NeverInline
static void testRemoveStaticFromMiddle(
@@ -170,7 +166,6 @@
System.out.println(used + otherUsed);
}
- @KeepConstantArguments
@KeepUnusedArguments
@NeverInline
static void testRemoveStaticFromEnd(
@@ -178,7 +173,6 @@
System.out.println(used + otherUsed);
}
- @KeepConstantArguments
@KeepUnusedArguments
@NeverInline
void testRemoveVirtualFromStart(
@@ -186,7 +180,6 @@
System.out.println(used + otherUsed);
}
- @KeepConstantArguments
@KeepUnusedArguments
@NeverInline
void testRemoveVirtualFromMiddle(
@@ -194,7 +187,6 @@
System.out.println(used + otherUsed);
}
- @KeepConstantArguments
@KeepUnusedArguments
@NeverInline
void testRemoveVirtualFromEnd(
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsCollisionMappingTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsCollisionMappingTest.java
index 7d9a941..d8a7d6b 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsCollisionMappingTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsCollisionMappingTest.java
@@ -10,7 +10,6 @@
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.CompilationMode;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.R8TestRunResult;
import com.android.tools.r8.TestBase;
@@ -51,7 +50,6 @@
.addProgramClasses(Main.class)
.setMinApi(parameters.getApiLevel())
.addKeepMainRule(Main.class)
- .enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.addKeepAttributeLineNumberTable()
.run(parameters.getRuntime(), Main.class)
@@ -94,7 +92,6 @@
System.out.println("test with unused");
}
- @KeepConstantArguments
@NeverInline
public static void test(String used, String unused) {
System.out.println("test with used: " + used);
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsDoubleTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsDoubleTest.java
index 282371b..95d571d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsDoubleTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsDoubleTest.java
@@ -6,9 +6,7 @@
import static org.junit.Assert.assertEquals;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
-import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import java.util.Collection;
import org.junit.Assert;
@@ -29,19 +27,16 @@
}
static class TestClass {
- @KeepConstantArguments
@NeverInline
public static double a(double a) {
return a;
}
- @KeepConstantArguments
@NeverInline
public static double a(double a, double b) {
return a;
}
- @KeepConstantArguments
@NeverInline
public static double a(double a, double b, double c) {
return a;
@@ -55,12 +50,6 @@
}
@Override
- public void configure(R8FullTestBuilder builder) {
- super.configure(builder);
- builder.enableConstantArgumentAnnotations();
- }
-
- @Override
public Class<?> getTestClass() {
return TestClass.class;
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsIntTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsIntTest.java
index 80309b2..06f665d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsIntTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsIntTest.java
@@ -6,9 +6,7 @@
import static org.junit.Assert.assertEquals;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
-import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.google.common.collect.ImmutableSet;
import java.util.Collection;
@@ -33,26 +31,22 @@
static class TestClass {
- @KeepConstantArguments
@NeverInline
public static int a(int a) {
return a;
}
- @KeepConstantArguments
@NeverInline
public static int a(int a, int b) {
return a;
}
- @KeepConstantArguments
@NeverInline
public static int iinc(int a, int b) {
b++;
return a;
}
- @KeepConstantArguments
@NeverInline
public static int a(int a, int b, int c) {
return a;
@@ -67,12 +61,6 @@
}
@Override
- public void configure(R8FullTestBuilder builder) {
- super.configure(builder);
- builder.enableConstantArgumentAnnotations();
- }
-
- @Override
public Class<?> getTestClass() {
return TestClass.class;
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsLongTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsLongTest.java
index 0dba75b..6f44c8d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsLongTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsLongTest.java
@@ -6,9 +6,7 @@
import static org.junit.Assert.assertEquals;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
-import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import java.util.Collection;
import org.junit.Assert;
@@ -29,20 +27,16 @@
}
static class TestClass {
-
- @KeepConstantArguments
@NeverInline
public static long a(long a) {
return a;
}
- @KeepConstantArguments
@NeverInline
public static long a(long a, long b) {
return a;
}
- @KeepConstantArguments
@NeverInline
public static long a(long a, long b, long c) {
return a;
@@ -56,12 +50,6 @@
}
@Override
- public void configure(R8FullTestBuilder builder) {
- super.configure(builder);
- builder.enableConstantArgumentAnnotations();
- }
-
- @Override
public Class<?> getTestClass() {
return TestClass.class;
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedTest.java
index dd63e78..717adac 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedTest.java
@@ -6,9 +6,7 @@
import static org.junit.Assert.assertEquals;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
-import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import java.util.Collection;
import org.junit.Assert;
@@ -29,8 +27,6 @@
}
static class TestClass {
-
- @KeepConstantArguments
@NeverInline
public static int a(int a, Object b) {
return a;
@@ -41,7 +37,6 @@
return a;
}
- @KeepConstantArguments
@NeverInline
public static int a(int a, Object b, int c) {
return c;
@@ -61,12 +56,6 @@
}
@Override
- public void configure(R8FullTestBuilder builder) {
- super.configure(builder);
- builder.enableConstantArgumentAnnotations();
- }
-
- @Override
public Class<?> getTestClass() {
return TestClass.class;
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedWidthTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedWidthTest.java
index 7ed9021..e10793d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedWidthTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedWidthTest.java
@@ -6,9 +6,7 @@
import static org.junit.Assert.assertEquals;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
-import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import java.util.Collection;
import org.junit.Assert;
@@ -29,26 +27,21 @@
}
static class TestClass {
-
- @KeepConstantArguments
@NeverInline
public static int a(int a, long b) {
return a;
}
- @KeepConstantArguments
@NeverInline
public static long a(long a, int b) {
return a;
}
- @KeepConstantArguments
@NeverInline
public static int a(int a, long b, int c) {
return c;
}
- @KeepConstantArguments
@NeverInline
public static long a(long a, int b, long c) {
return c;
@@ -63,12 +56,6 @@
}
@Override
- public void configure(R8FullTestBuilder builder) {
- super.configure(builder);
- builder.enableConstantArgumentAnnotations();
- }
-
- @Override
public Class<?> getTestClass() {
return TestClass.class;
}
diff --git a/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java b/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
index beb87b8..7f41f05 100644
--- a/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
+++ b/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
@@ -95,8 +95,6 @@
private boolean isInterface = false;
private String access = "public";
- private final List<String> pendingAnnotations = new ArrayList<>();
-
private ClassBuilder(String name) {
this(name, "java/lang/Object");
}
@@ -126,13 +124,6 @@
return addMethod("public abstract", name, argumentTypes, returnType);
}
- public void addRuntimeInvisibleAnnotation(String typeName) {
- pendingAnnotations.add(
- StringUtils.lines(
- ".annotation invisible " + DescriptorUtils.javaTypeToDescriptor(typeName),
- ".end annotation"));
- }
-
public MethodSignature addFinalMethod(
String name,
List<String> argumentTypes,
@@ -230,10 +221,6 @@
.append(StringUtils.join("", argumentTypes, BraceType.PARENS))
.append(returnType)
.append("\n");
- if (!pendingAnnotations.isEmpty()) {
- pendingAnnotations.forEach(builder::append);
- pendingAnnotations.clear();
- }
for (String line : lines) {
builder.append(line).append("\n");
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java b/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
index 2516b74..495eae6 100644
--- a/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
+++ b/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
@@ -262,7 +262,7 @@
}
}
- protected void checkMethodPresenceInInput(
+ private void checkMethodPresenceInInput(
String className, MethodSignature methodSignature, boolean isPresent) {
boolean foundMethod = AsmUtils.doesMethodExist(classpath, className,
methodSignature.name, methodSignature.toDescriptor());
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
index 46adea0..3d872c4 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
@@ -14,7 +14,6 @@
import com.android.tools.r8.R8TestBuilder;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.jasmin.JasminBuilder;
import com.android.tools.r8.jasmin.JasminBuilder.ClassBuilder;
@@ -29,6 +28,7 @@
import java.util.Collection;
import java.util.Collections;
import org.junit.Assert;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -111,7 +111,7 @@
} else {
assertTrue(fieldSubject.getField().accessFlags.isPrivate());
checkMethodIsKept(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
+ checkMethodIsKept(outerClass, setterAccessor);
}
});
}
@@ -146,7 +146,7 @@
assertTrue(fieldSubject.getField().accessFlags.isPrivate());
checkMethodIsKept(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
+ checkMethodIsKept(outerClass, setterAccessor);
}
});
}
@@ -180,7 +180,7 @@
} else {
assertTrue(fieldSubject.getField().accessFlags.isPrivate());
checkMethodIsKept(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
+ checkMethodIsKept(outerClass, setterAccessor);
}
});
}
@@ -214,7 +214,7 @@
} else {
assertTrue(fieldSubject.getField().accessFlags.isPrivate());
checkMethodIsKept(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
+ checkMethodIsKept(outerClass, setterAccessor);
}
});
}
@@ -247,7 +247,7 @@
} else {
assertTrue(fieldSubject.getField().accessFlags.isPrivate());
checkMethodIsKept(outerClass, getterAccessor);
- checkMethodIsRemoved(outerClass, setterAccessor);
+ checkMethodIsKept(outerClass, setterAccessor);
}
});
}
@@ -340,6 +340,7 @@
}
@Test
+ @Ignore("b/74103342")
public void testAccessorFromPrivate() throws Exception {
TestKotlinCompanionClass testedClass = ACCESSOR_COMPANION_PROPERTY_CLASS;
String mainClass = addMainToClasspath("accessors.AccessorKt",
@@ -347,8 +348,28 @@
runTest("accessors", mainClass)
.inspect(
inspector -> {
- checkClassIsRemoved(inspector, testedClass.getOuterClassName());
- checkClassIsRemoved(inspector, testedClass.getClassName());
+ ClassSubject outerClass =
+ checkClassIsKept(inspector, testedClass.getOuterClassName());
+ ClassSubject companionClass = checkClassIsKept(inspector, testedClass.getClassName());
+ String propertyName = "property";
+ FieldSubject fieldSubject =
+ checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
+ assertTrue(fieldSubject.getField().accessFlags.isStatic());
+
+ // We cannot inline the getter because we don't know if NPE is preserved.
+ MemberNaming.MethodSignature getter = testedClass.getGetterForProperty(propertyName);
+ checkMethodIsKept(companionClass, getter);
+
+ // We should always inline the static accessor method.
+ MemberNaming.MethodSignature getterAccessor =
+ testedClass.getGetterAccessorForProperty(propertyName, AccessorKind.FROM_INNER);
+ checkMethodIsRemoved(companionClass, getterAccessor);
+
+ if (allowAccessModification) {
+ assertTrue(fieldSubject.getField().accessFlags.isPublic());
+ } else {
+ assertTrue(fieldSubject.getField().accessFlags.isPrivate());
+ }
});
}
@@ -368,6 +389,7 @@
}
@Test
+ @Ignore("b/74103342")
public void testPrivatePropertyAccessorForInnerClassCanBeInlined() throws Exception {
TestKotlinClass testedClass = PROPERTY_ACCESS_FOR_INNER_CLASS;
String mainClass = addMainToClasspath(testedClass.className + "Kt",
@@ -375,13 +397,6 @@
runTest("accessors", mainClass)
.inspect(
inspector -> {
- if (allowAccessModification
- && (testParameters.isCfRuntime()
- || !kotlinParameters.is(KOTLINC_1_5_0, KotlinTargetVersion.JAVA_8))) {
- checkClassIsRemoved(inspector, testedClass.getClassName());
- return;
- }
-
ClassSubject classSubject = checkClassIsKept(inspector, testedClass.getClassName());
String propertyName = "privateProp";
@@ -400,12 +415,13 @@
} else {
assertTrue(fieldSubject.getField().accessFlags.isPrivate());
checkMethodIsKept(classSubject, getterAccessor);
- checkMethodIsRemoved(classSubject, setterAccessor);
+ checkMethodIsKept(classSubject, setterAccessor);
}
});
}
@Test
+ @Ignore("b/74103342")
public void testPrivateLateInitPropertyAccessorForInnerClassCanBeInlined() throws Exception {
TestKotlinClass testedClass = PROPERTY_ACCESS_FOR_INNER_CLASS;
String mainClass = addMainToClasspath(testedClass.className + "Kt",
@@ -413,15 +429,31 @@
runTest("accessors", mainClass)
.inspect(
inspector -> {
- if (kotlinc.getCompilerVersion() == KOTLINC_1_5_0 && testParameters.isDexRuntime()) {
- checkClassIsKept(inspector, testedClass.getClassName());
+ ClassSubject classSubject = checkClassIsKept(inspector, testedClass.getClassName());
+
+ String propertyName = "privateLateInitProp";
+ FieldSubject fieldSubject =
+ checkFieldIsKept(classSubject, JAVA_LANG_STRING, propertyName);
+ assertFalse(fieldSubject.getField().accessFlags.isStatic());
+
+ MemberNaming.MethodSignature getterAccessor =
+ testedClass.getGetterAccessorForProperty(propertyName, AccessorKind.FROM_INNER);
+ MemberNaming.MethodSignature setterAccessor =
+ testedClass.getSetterAccessorForProperty(propertyName, AccessorKind.FROM_INNER);
+ if (allowAccessModification) {
+ assertTrue(fieldSubject.getField().accessFlags.isPublic());
+ checkMethodIsRemoved(classSubject, getterAccessor);
+ checkMethodIsRemoved(classSubject, setterAccessor);
} else {
- checkClassIsRemoved(inspector, testedClass.getClassName());
+ assertTrue(fieldSubject.getField().accessFlags.isPrivate());
+ checkMethodIsKept(classSubject, getterAccessor);
+ checkMethodIsKept(classSubject, setterAccessor);
}
});
}
@Test
+ @Ignore("b/74103342")
public void testAccessorForLambdaIsRemovedWhenNotUsed() throws Exception {
TestKotlinClass testedClass = PROPERTY_ACCESS_FOR_LAMBDA_CLASS;
String mainClass = addMainToClasspath(testedClass.className + "Kt",
@@ -429,11 +461,21 @@
runTest("accessors", mainClass)
.inspect(
inspector -> {
- checkClassIsRemoved(inspector, testedClass.getClassName());
+ ClassSubject classSubject = checkClassIsKept(inspector, testedClass.getClassName());
+ String propertyName = "property";
+
+ MemberNaming.MethodSignature getterAccessor =
+ testedClass.getGetterAccessorForProperty(propertyName, AccessorKind.FROM_LAMBDA);
+ MemberNaming.MethodSignature setterAccessor =
+ testedClass.getSetterAccessorForProperty(propertyName, AccessorKind.FROM_LAMBDA);
+
+ checkMethodIsRemoved(classSubject, getterAccessor);
+ checkMethodIsRemoved(classSubject, setterAccessor);
});
}
@Test
+ @Ignore("b/74103342")
public void testAccessorForLambdaCanBeInlined() throws Exception {
TestKotlinClass testedClass = PROPERTY_ACCESS_FOR_LAMBDA_CLASS;
String mainClass = addMainToClasspath(testedClass.className + "Kt",
@@ -441,25 +483,16 @@
runTest("accessors", mainClass)
.inspect(
inspector -> {
- if (allowAccessModification) {
- checkClassIsRemoved(inspector, testedClass.getClassName());
- return;
- }
-
ClassSubject classSubject = checkClassIsKept(inspector, testedClass.getClassName());
String propertyName = "property";
FieldSubject fieldSubject =
checkFieldIsKept(classSubject, JAVA_LANG_STRING, propertyName);
assertFalse(fieldSubject.getField().accessFlags.isStatic());
- AccessorKind accessorKind =
- kotlinc.getCompilerVersion() == KOTLINC_1_5_0
- ? AccessorKind.FROM_INNER
- : AccessorKind.FROM_LAMBDA;
MemberNaming.MethodSignature getterAccessor =
- testedClass.getGetterAccessorForProperty(propertyName, accessorKind);
+ testedClass.getGetterAccessorForProperty(propertyName, AccessorKind.FROM_LAMBDA);
MemberNaming.MethodSignature setterAccessor =
- testedClass.getSetterAccessorForProperty(propertyName, accessorKind);
+ testedClass.getSetterAccessorForProperty(propertyName, AccessorKind.FROM_LAMBDA);
if (allowAccessModification) {
assertTrue(fieldSubject.getField().accessFlags.isPublic());
checkMethodIsRemoved(classSubject, getterAccessor);
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
index 4457386..5de5dbd 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
@@ -54,7 +54,9 @@
"intrinsics",
"intrinsics.IntrinsicsKt",
testBuilder ->
- testBuilder.addKeepRules(extraRules).noHorizontalClassMerging(Intrinsics.class))
+ testBuilder
+ .addKeepRules(extraRules)
+ .noHorizontalClassMerging(Intrinsics.class))
.inspect(
inspector -> {
ClassSubject intrinsicsClass =
@@ -73,7 +75,8 @@
"checkParameterIsNotNull",
"void",
Lists.newArrayList("java.lang.Object", "java.lang.String")),
- !allowAccessModification)
+ // TODO(b/179866251): This is also different on CF
+ !allowAccessModification || testParameters.isCfRuntime())
.build());
});
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
index c605951..65822f7 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
@@ -253,7 +253,9 @@
runTest(
PACKAGE_NAME,
mainClass,
- testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
+ testBuilder ->
+ testBuilder
+ .addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
ClassSubject classSubject =
@@ -270,7 +272,7 @@
} else {
assertTrue(fieldSubject.getField().accessFlags.isPrivate());
checkMethodIsKept(classSubject, getter);
- checkMethodIsRemoved(classSubject, setter);
+ checkMethodIsKept(classSubject, setter);
}
});
}
@@ -648,7 +650,9 @@
runTest(
PACKAGE_NAME,
mainClass,
- testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
+ testBuilder ->
+ testBuilder
+ .addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
ClassSubject objectClass = checkClassIsKept(inspector, testedClass.getClassName());
@@ -667,7 +671,7 @@
checkMethodIsRemoved(objectClass, setter);
} else {
checkMethodIsKept(objectClass, getter);
- checkMethodIsRemoved(objectClass, setter);
+ checkMethodIsKept(objectClass, setter);
}
if (allowAccessModification) {
@@ -720,7 +724,9 @@
runTest(
PACKAGE_NAME,
mainClass,
- testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
+ testBuilder ->
+ testBuilder
+ .addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
ClassSubject objectClass = checkClassIsKept(inspector, testedClass.getClassName());
@@ -740,7 +746,7 @@
checkMethodIsRemoved(objectClass, setter);
} else {
checkMethodIsKept(objectClass, getter);
- checkMethodIsRemoved(objectClass, setter);
+ checkMethodIsKept(objectClass, setter);
}
if (allowAccessModification) {
@@ -759,7 +765,9 @@
runTest(
PACKAGE_NAME,
mainClass,
- testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
+ testBuilder ->
+ testBuilder
+ .addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
ClassSubject objectClass = checkClassIsKept(inspector, testedClass.getClassName());
@@ -779,7 +787,7 @@
checkMethodIsRemoved(objectClass, setter);
} else {
checkMethodIsKept(objectClass, getter);
- checkMethodIsRemoved(objectClass, setter);
+ checkMethodIsKept(objectClass, setter);
}
if (allowAccessModification) {
@@ -888,7 +896,9 @@
runTest(
PACKAGE_NAME,
mainClass,
- testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
+ testBuilder ->
+ testBuilder
+ .addOptionsModification(disableAggressiveClassOptimizations))
.inspect(
inspector -> {
ClassSubject objectClass = checkClassIsKept(inspector, testedClass.getClassName());
@@ -906,7 +916,7 @@
} else {
assertTrue(fieldSubject.getField().accessFlags.isPrivate());
checkMethodIsKept(objectClass, getter);
- checkMethodIsRemoved(objectClass, setter);
+ checkMethodIsKept(objectClass, setter);
}
});
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/SimplifyIfNotNullKotlinTest.java b/src/test/java/com/android/tools/r8/kotlin/SimplifyIfNotNullKotlinTest.java
index 091a8b4..e83626b 100644
--- a/src/test/java/com/android/tools/r8/kotlin/SimplifyIfNotNullKotlinTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/SimplifyIfNotNullKotlinTest.java
@@ -11,7 +11,6 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
@@ -48,13 +47,7 @@
ImmutableList.of("java.util.Collection", STRING, STRING, "java.lang.Integer"));
final String mainClassName = ex1.getClassName();
- final String extraRules =
- StringUtils.lines(
- neverInlineMethod(mainClassName, testMethodSignature),
- // TODO(b/173398086): uniqueMethodWithName() does not work with argument removal.
- "-keepclassmembers,allowoptimization,allowshrinking class non_null.Example1Kt {",
- " *** forMakeAndModel(...);",
- "}");
+ final String extraRules = neverInlineMethod(mainClassName, testMethodSignature);
runTest(
FOLDER,
mainClassName,
@@ -63,11 +56,7 @@
inspector -> {
ClassSubject clazz = checkClassIsKept(inspector, ex1.getClassName());
- // Verify forMakeAndModel(...) is present in the input.
- checkMethodPresenceInInput(clazz.getOriginalName(), testMethodSignature, true);
-
- // Find forMakeAndModel(...) after parameter removal.
- MethodSubject testMethod = clazz.uniqueMethodWithName(testMethodSignature.name);
+ MethodSubject testMethod = checkMethodIsKept(clazz, testMethodSignature);
long ifzCount =
testMethod.streamInstructions().filter(i -> i.isIfEqz() || i.isIfNez()).count();
long paramNullCheckCount =
diff --git a/src/test/java/com/android/tools/r8/naming/EnumMinification.java b/src/test/java/com/android/tools/r8/naming/EnumMinification.java
index 3cf01e0..aeb142f 100644
--- a/src/test/java/com/android/tools/r8/naming/EnumMinification.java
+++ b/src/test/java/com/android/tools/r8/naming/EnumMinification.java
@@ -102,7 +102,7 @@
class Main {
public static void main(String[] args) {
- Enum e = Enum.valueOf(System.currentTimeMillis() > 0 ? "VALUE1" : null);
+ Enum e = Enum.valueOf("VALUE1");
System.out.print(e);
}
}
diff --git a/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java b/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
index c129553..3c52044 100644
--- a/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
+++ b/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
@@ -97,12 +97,7 @@
getKotlinAnnotationJar(kotlinc))
.addProgramFiles(getJavaJarFile(FOLDER))
.addKeepMainRule(mainClassName)
- .addKeepRules(
- "-keepconstantarguments class kotlin.jvm.internal.Intrinsics {",
- " *** checkParameterIsNotNull(...);",
- "}")
.allowDiagnosticWarningMessages()
- .enableProguardTestOptions()
.minification(minification)
.compile()
.assertAllWarningMessagesMatch(
@@ -163,10 +158,7 @@
"-neverclassinline class **." + targetClassName,
"-" + NoVerticalClassMergingRule.RULE_NAME + " class **." + targetClassName,
"-" + NoHorizontalClassMergingRule.RULE_NAME + " class **." + targetClassName,
- "-neverinline class **." + targetClassName + " { <methods>; }",
- "-keepconstantarguments class kotlin.jvm.internal.Intrinsics {",
- " *** checkParameterIsNotNull(...);",
- "}"))
+ "-neverinline class **." + targetClassName + " { <methods>; }"))
.allowDiagnosticWarningMessages()
.minification(minification)
.compile()
diff --git a/src/test/java/com/android/tools/r8/naming/overloadaggressively/ValidNameConflictTest.java b/src/test/java/com/android/tools/r8/naming/overloadaggressively/ValidNameConflictTest.java
index 6c1175c..3d9645d 100644
--- a/src/test/java/com/android/tools/r8/naming/overloadaggressively/ValidNameConflictTest.java
+++ b/src/test/java/com/android/tools/r8/naming/overloadaggressively/ValidNameConflictTest.java
@@ -444,12 +444,10 @@
ProcessResult javaOutput = runOnJavaNoVerifyRaw(builder, CLASS_NAME);
assertEquals(0, javaOutput.exitCode);
- List<String> pgConfigs =
- ImmutableList.of(
- keepMainProguardConfiguration(CLASS_NAME),
- "-overloadaggressively",
- "-dontoptimize",
- "-dontshrink");
+ List<String> pgConfigs = ImmutableList.of(
+ keepMainProguardConfiguration(CLASS_NAME),
+ "-overloadaggressively",
+ "-dontshrink");
AndroidApp app = compileWithR8(builder, pgConfigs, null, backend);
CodeInspector codeInspector = new CodeInspector(app);
diff --git a/src/test/java/com/android/tools/r8/regress/b165825758/Regress165825758Test.java b/src/test/java/com/android/tools/r8/regress/b165825758/Regress165825758Test.java
index 41d6a49..bf95231 100644
--- a/src/test/java/com/android/tools/r8/regress/b165825758/Regress165825758Test.java
+++ b/src/test/java/com/android/tools/r8/regress/b165825758/Regress165825758Test.java
@@ -9,7 +9,6 @@
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.NeverInline;
-import com.android.tools.r8.NeverReprocessMethod;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -36,7 +35,7 @@
@Parameterized.Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimesAndApiLevels().build();
+ return getTestParameters().withAllRuntimes().withAllApiLevels().build();
}
public Regress165825758Test(TestParameters parameters) {
@@ -58,7 +57,6 @@
.addInnerClasses(Regress165825758Test.class)
.addKeepMainRule(TestClass.class)
.addKeepClassRules(A.class)
- .enableNeverReprocessMethodAnnotations()
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), TestClass.class)
.assertSuccessWithOutput(EXPECTED)
@@ -101,7 +99,6 @@
static class A {
@NeverInline
- @NeverReprocessMethod
void synchronizedMethod() {
synchronized (this) {
TestClass.throwNpe();
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageWithPackagePrivateMethodParameterAnnotationTest.java b/src/test/java/com/android/tools/r8/repackage/RepackageWithPackagePrivateMethodParameterAnnotationTest.java
index 8c754e5..d9833ae 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageWithPackagePrivateMethodParameterAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageWithPackagePrivateMethodParameterAnnotationTest.java
@@ -8,7 +8,6 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
@@ -37,7 +36,6 @@
.addKeepClassRules(NonPublicKeptAnnotation.class)
.addKeepRuntimeVisibleParameterAnnotations()
.apply(this::configureRepackaging)
- .enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
@@ -69,7 +67,6 @@
public static class IneligibleForRepackaging {
- @KeepConstantArguments
@NeverInline
public static void greet(@NonPublicKeptAnnotation String greeting) {
System.out.println(greeting);
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java b/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
index a9574e8..7733b23 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
@@ -57,7 +57,6 @@
testForR8(parameters.getBackend())
.addProgramClassesAndInnerClasses(Ordinals.class)
.addKeepMainRule(Ordinals.class)
- .enableConstantArgumentAnnotations()
.enableForceInliningAnnotations()
.enableInliningAnnotations()
.enableSideEffectAnnotations()
@@ -107,7 +106,6 @@
testForR8(parameters.getBackend())
.addProgramClassesAndInnerClasses(Names.class)
.addKeepMainRule(Names.class)
- .enableConstantArgumentAnnotations()
.enableForceInliningAnnotations()
.enableInliningAnnotations()
.enableSideEffectAnnotations()
@@ -154,7 +152,6 @@
testForR8(parameters.getBackend())
.addProgramClassesAndInnerClasses(ToStrings.class)
.addKeepMainRule(ToStrings.class)
- .enableConstantArgumentAnnotations()
.enableForceInliningAnnotations()
.enableInliningAnnotations()
.enableSideEffectAnnotations()
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/Names.java b/src/test/java/com/android/tools/r8/rewrite/enums/Names.java
index 1c2964c..5dd5ec0 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/Names.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/Names.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.AssumeMayHaveSideEffects;
import com.android.tools.r8.ForceInline;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import java.util.concurrent.TimeUnit;
@@ -70,7 +69,6 @@
return Number.DEFAULT.name();
}
- @KeepConstantArguments
@NeverInline
private static String phi(boolean value) {
Number number = Number.ONE;
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/Ordinals.java b/src/test/java/com/android/tools/r8/rewrite/enums/Ordinals.java
index c3fbffc..e1eee2c 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/Ordinals.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/Ordinals.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.AssumeMayHaveSideEffects;
import com.android.tools.r8.ForceInline;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import java.util.concurrent.TimeUnit;
@@ -80,7 +79,6 @@
return Number.DEFAULT.ordinal();
}
- @KeepConstantArguments
@NeverInline
private static long phi(boolean value) {
Number number = Number.ONE;
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/ToStrings.java b/src/test/java/com/android/tools/r8/rewrite/enums/ToStrings.java
index 020f5fd..8055344 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/ToStrings.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/ToStrings.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.AssumeMayHaveSideEffects;
import com.android.tools.r8.ForceInline;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
@@ -107,7 +106,6 @@
return NoToString.DEFAULT.toString();
}
- @KeepConstantArguments
@NeverInline
private static String phi(boolean value) {
NoToString number = NoToString.ONE;
diff --git a/src/test/java/com/android/tools/r8/rewrite/switches/MaxIntSwitchTest.java b/src/test/java/com/android/tools/r8/rewrite/switches/MaxIntSwitchTest.java
index 26dcb7a..b32e476 100644
--- a/src/test/java/com/android/tools/r8/rewrite/switches/MaxIntSwitchTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/switches/MaxIntSwitchTest.java
@@ -7,7 +7,6 @@
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.CompilationMode;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NeverPropagateValue;
import com.android.tools.r8.TestBase;
@@ -105,7 +104,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(this.getClass())
.addKeepMainRule(TestClass.class)
- .enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.enableMemberValuePropagationAnnotations()
.setMinApi(parameters.getApiLevel())
@@ -127,7 +125,6 @@
"?");
static class TestClass {
- @KeepConstantArguments
@NeverInline
@NeverPropagateValue
public static void f(int i) {
@@ -146,7 +143,6 @@
}
}
- @KeepConstantArguments
@NeverInline
@NeverPropagateValue
public static void g(int i) {
@@ -166,7 +162,6 @@
}
}
- @KeepConstantArguments
@NeverInline
@NeverPropagateValue
public static void h(int i) {
@@ -179,7 +174,6 @@
}
}
- @KeepConstantArguments
@NeverInline
@NeverPropagateValue
public static void s(String s) {
diff --git a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
index 6a95824..d98725d 100644
--- a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.shaking;
+import static com.android.tools.r8.DiagnosticsMatcher.diagnosticException;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.proguardConfigurationRuleDoesNotMatch;
import static com.android.tools.r8.utils.codeinspector.Matchers.typeVariableNotInScope;
@@ -12,6 +13,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.R8;
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
@@ -74,7 +76,8 @@
assertThat(method, isPresent());
}
- @Test
+ // TODO(b/159966986): A general keep rule should not cause compiler assertion errors.
+ @Test(expected = CompilationFailedException.class)
public void testPresentAnnotation() throws Exception {
testForR8(Backend.CF)
.addProgramFiles(R8_JAR)
@@ -82,7 +85,10 @@
.addDontWarnGoogle()
.addDontWarnJavax()
.addDontWarn("org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement")
- .compile();
+ .allowDiagnosticInfoMessages()
+ .compileWithExpectedDiagnostics(
+ diagnostics -> diagnostics.assertErrorsMatch(diagnosticException(AssertionError.class)))
+ .apply(TestBase::verifyAllInfoFromGenericSignatureTypeParameterValidation);
}
@Test
diff --git a/src/test/java/com/android/tools/r8/shaking/array/DeadArrayLengthTest.java b/src/test/java/com/android/tools/r8/shaking/array/DeadArrayLengthTest.java
index 03d5aa6..14259ca 100644
--- a/src/test/java/com/android/tools/r8/shaking/array/DeadArrayLengthTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/array/DeadArrayLengthTest.java
@@ -31,7 +31,7 @@
@Parameterized.Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimesAndApiLevels().build();
+ return getTestParameters().withAllRuntimes().build();
}
public DeadArrayLengthTest(TestParameters parameters) {
@@ -65,7 +65,7 @@
testForD8()
.release()
.addProgramClasses(MAIN)
- .setMinApi(parameters.getApiLevel())
+ .setMinApi(parameters.getRuntime())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutput(EXPECTED_OUTPUT)
.inspect(codeInspector -> inspect(codeInspector, false));
@@ -79,7 +79,7 @@
.enableInliningAnnotations()
.enableMemberValuePropagationAnnotations()
.noMinification()
- .setMinApi(parameters.getApiLevel())
+ .setMinApi(parameters.getRuntime())
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutput(EXPECTED_OUTPUT)
.inspect(codeInspector -> inspect(codeInspector, true));
diff --git a/src/test/java/com/android/tools/r8/shaking/attributes/KeepSignatureTest.java b/src/test/java/com/android/tools/r8/shaking/attributes/KeepSignatureTest.java
index fdea6ab..9dfff6e 100644
--- a/src/test/java/com/android/tools/r8/shaking/attributes/KeepSignatureTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/attributes/KeepSignatureTest.java
@@ -9,7 +9,6 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.R8TestBuilder;
@@ -81,7 +80,6 @@
ProguardKeepAttributes.INNER_CLASSES,
ProguardKeepAttributes.ENCLOSING_METHOD)
.setMinApi(parameters.getApiLevel())
- .enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.run(parameters.getRuntime(), KeptClass.class)
@@ -139,7 +137,6 @@
public List<P> notKeptField;
- @KeepConstantArguments
@NeverInline
public List<P> notKeptMethod(P p1, P p2) {
if (notKeptField != null) {
@@ -166,7 +163,6 @@
return (R) keptField;
}
- @KeepConstantArguments
@NeverInline
@SuppressWarnings("unchecked")
public <R> R notKeptMethod(T t) {
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking2Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking2Test.java
index 74232e1..d951404 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking2Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking2Test.java
@@ -3,10 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.shaking.examples;
-import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertTrue;
-
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.shaking.TreeShakingTest;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
@@ -14,6 +10,7 @@
import com.google.common.collect.ImmutableList;
import java.util.Collections;
import java.util.List;
+import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -44,7 +41,7 @@
@Test
public void testKeeprules() throws Exception {
runTest(
- TreeShaking2Test::shaking2SuperClassIsRemoved,
+ TreeShaking2Test::shaking2SuperClassIsAbstract,
null,
null,
ImmutableList.of("src/test/examples/shaking2/keep-rules.txt"));
@@ -65,15 +62,16 @@
null, null, null, ImmutableList.of("src/test/examples/shaking2/keep-rules-printusage.txt"));
}
- private static void shaking2SuperClassIsRemoved(CodeInspector inspector) {
+ private static void shaking2SuperClassIsAbstract(CodeInspector inspector) {
ClassSubject clazz = inspector.clazz("shaking2.SuperClass");
- assertTrue(clazz.isAbstract());
- assertTrue(clazz.method("void", "virtualMethod", Collections.emptyList()).isAbstract());
- assertThat(
- clazz.method(
- "void",
- "virtualMethod2",
- ImmutableList.of("int", "int", "int", "int", "int", "int", "int", "int")),
- isAbsent());
+ Assert.assertTrue(clazz.isAbstract());
+ Assert.assertTrue(clazz.method("void", "virtualMethod", Collections.emptyList()).isAbstract());
+ Assert.assertTrue(
+ clazz
+ .method(
+ "void",
+ "virtualMethod2",
+ ImmutableList.of("int", "int", "int", "int", "int", "int", "int", "int"))
+ .isAbstract());
}
}
diff --git a/src/test/java/com/android/tools/r8/shaking/keepparameternames/KeepParameterNamesTest.java b/src/test/java/com/android/tools/r8/shaking/keepparameternames/KeepParameterNamesTest.java
index 4f8131d..4740853 100644
--- a/src/test/java/com/android/tools/r8/shaking/keepparameternames/KeepParameterNamesTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/keepparameternames/KeepParameterNamesTest.java
@@ -10,7 +10,6 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.KeepUnusedArguments;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
@@ -174,7 +173,6 @@
.addInnerClasses(KeepParameterNamesTest.class)
.addKeepMainRule(TestClass.class)
.addKeepRules("-keep class " + Api.class.getTypeName() + "{ api*(...); }")
- .enableConstantArgumentAnnotations()
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.enableUnusedArgumentAnnotations()
@@ -211,7 +209,6 @@
"In Api.api2",
"In Api.api3");
testForR8(parameters.getBackend())
- .enableConstantArgumentAnnotations()
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
.enableUnusedArgumentAnnotations()
@@ -256,7 +253,6 @@
}
@NeverInline
- @KeepConstantArguments
@KeepUnusedArguments
void api1(int parameter1, String parameter2) {
try {
@@ -268,14 +264,12 @@
}
@NeverInline
- @KeepConstantArguments
@KeepUnusedArguments
void api2(long parameter1, double parameter2) {
System.out.println("In Api.api2");
}
@NeverInline
- @KeepConstantArguments
@KeepUnusedArguments
void api3(List<String> parameter1, Map<String, Object> parameter2) {
System.out.println("In Api.api3");
diff --git a/src/test/kotlinR8TestResources/unused_singleton/main.kt b/src/test/kotlinR8TestResources/unused_singleton/main.kt
index 6c06b8c..213acb1 100644
--- a/src/test/kotlinR8TestResources/unused_singleton/main.kt
+++ b/src/test/kotlinR8TestResources/unused_singleton/main.kt
@@ -10,6 +10,6 @@
fun provideGreeting() = "Hello"
}
-fun main(args: Array<String>?) {
+fun main(args: Array<String>) {
println(provideGreeting())
}