Merge "Make Shrinker-specific utils instance methods."
diff --git a/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java b/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java
index dd1ee60..db3f356 100644
--- a/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java
+++ b/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java
@@ -100,22 +100,13 @@
this.minify = minify;
}
- private String run(AndroidApp app, String main) throws IOException {
- if (generatesDex(shrinker)) {
- return runOnArt(app, main);
- } else {
- assert generatesCf(shrinker);
- return runOnJava(app, main, Collections.emptyList());
- }
- }
-
private static boolean vmVersionIgnored() {
return !ToolHelper.getDexVm().getVersion().isAtLeast(Version.V7_0_0);
}
@Test
public void test_keepAll() throws Exception {
- Assume.assumeFalse(generatesDex(shrinker) && vmVersionIgnored());
+ Assume.assumeFalse(shrinker.generatesDex() && vmVersionIgnored());
Class mainClass = TestMain.class;
String keep = !minify ? "-keep" : "-keep,allowobfuscation";
List<String> config = ImmutableList.of(
@@ -138,10 +129,10 @@
AndroidApp app = runShrinker(shrinker, CLASSES, config);
assertEquals(
StringUtils.withNativeLineSeparator("123451234567\nABC\n"),
- run(app, mainClass.getCanonicalName()));
+ runOnVM(app, mainClass.getCanonicalName(), shrinker.toBackend()));
CodeInspector codeInspector =
- isR8(shrinker) ? new CodeInspector(app) : new CodeInspector(app, proguardMap);
+ shrinker.isR8() ? new CodeInspector(app) : new CodeInspector(app, proguardMap);
ClassSubject testClass = codeInspector.clazz(TestClass.class);
assertThat(testClass, isPresent());
@@ -149,7 +140,7 @@
MethodSubject staticMethod = testClass.method("void", "unused", ImmutableList.of());
assertThat(staticMethod, isPresent());
assertEquals(minify, staticMethod.isRenamed());
- if (isR8(shrinker)) {
+ if (shrinker.isR8()) {
assertEquals(allowAccessModification, staticMethod.getMethod().accessFlags.isPublic());
} else {
assertFalse(staticMethod.getMethod().accessFlags.isPublic());
@@ -159,14 +150,14 @@
staticMethod = testClass.method("java.lang.String", "staticMethod", ImmutableList.of());
assertThat(staticMethod, isPresent());
assertEquals(minify, staticMethod.isRenamed());
- boolean publicizeCondition = isR8(shrinker) ? allowAccessModification
+ boolean publicizeCondition = shrinker.isR8() ? allowAccessModification
: minify && repackagePrefix != null && allowAccessModification;
assertEquals(publicizeCondition, staticMethod.getMethod().accessFlags.isPublic());
}
@Test
public void test_keepNonPublic() throws Exception {
- Assume.assumeFalse(generatesDex(shrinker) && vmVersionIgnored());
+ Assume.assumeFalse(shrinker.generatesDex() && vmVersionIgnored());
Class mainClass = TestMain.class;
String keep = !minify ? "-keep" : "-keep,allowobfuscation";
List<String> config = ImmutableList.of(
@@ -189,10 +180,10 @@
AndroidApp app = runShrinker(shrinker, CLASSES, config);
assertEquals(
StringUtils.withNativeLineSeparator("123451234567\nABC\n"),
- run(app, mainClass.getCanonicalName()));
+ runOnVM(app, mainClass.getCanonicalName(), shrinker.toBackend()));
CodeInspector codeInspector =
- isR8(shrinker) ? new CodeInspector(app) : new CodeInspector(app, proguardMap);
+ shrinker.isR8() ? new CodeInspector(app) : new CodeInspector(app, proguardMap);
ClassSubject testClass = codeInspector.clazz(TestClass.class);
assertThat(testClass, isPresent());
@@ -200,7 +191,7 @@
MethodSubject staticMethod = testClass.method("void", "unused", ImmutableList.of());
assertThat(staticMethod, isPresent());
assertEquals(minify, staticMethod.isRenamed());
- if (isR8(shrinker)) {
+ if (shrinker.isR8()) {
assertEquals(allowAccessModification, staticMethod.getMethod().accessFlags.isPublic());
} else {
assertFalse(staticMethod.getMethod().accessFlags.isPublic());
@@ -210,14 +201,14 @@
staticMethod = testClass.method("java.lang.String", "staticMethod", ImmutableList.of());
assertThat(staticMethod, isPresent());
assertEquals(minify, staticMethod.isRenamed());
- boolean publicizeCondition = isR8(shrinker) ? allowAccessModification
+ boolean publicizeCondition = shrinker.isR8() ? allowAccessModification
: minify && repackagePrefix != null && allowAccessModification;
assertEquals(publicizeCondition, staticMethod.getMethod().accessFlags.isPublic());
}
@Test
public void test_keepPublic() throws Exception {
- Assume.assumeFalse(generatesDex(shrinker) && vmVersionIgnored());
+ Assume.assumeFalse(shrinker.generatesDex() && vmVersionIgnored());
Class mainClass = TestMain.class;
String keep = !minify ? "-keep" : "-keep,allowobfuscation";
Iterable<String> config = ImmutableList.of(
@@ -236,7 +227,7 @@
"}",
"-dontwarn java.lang.invoke.*"
);
- if (isR8(shrinker)) {
+ if (shrinker.isR8()) {
config = Iterables.concat(config, ImmutableList.of(
"-neverinline class " + TestClass.class.getCanonicalName() + " {",
" * staticMethod();",
@@ -247,10 +238,10 @@
AndroidApp app = runShrinker(shrinker, CLASSES, config);
assertEquals(
StringUtils.withNativeLineSeparator("123451234567\nABC\n"),
- run(app, mainClass.getCanonicalName()));
+ runOnVM(app, mainClass.getCanonicalName(), shrinker.toBackend()));
CodeInspector codeInspector =
- isR8(shrinker) ? new CodeInspector(app) : new CodeInspector(app, proguardMap);
+ shrinker.isR8() ? new CodeInspector(app) : new CodeInspector(app, proguardMap);
ClassSubject testClass = codeInspector.clazz(TestClass.class);
assertThat(testClass, isPresent());
@@ -262,7 +253,7 @@
staticMethod = testClass.method("java.lang.String", "staticMethod", ImmutableList.of());
assertThat(staticMethod, isPresent());
assertEquals(minify, staticMethod.isRenamed());
- boolean publicizeCondition = isR8(shrinker) ? allowAccessModification
+ boolean publicizeCondition = shrinker.isR8() ? allowAccessModification
: minify && repackagePrefix != null && allowAccessModification;
assertEquals(publicizeCondition, staticMethod.getMethod().accessFlags.isPublic());
}
diff --git a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatibilityTestBase.java b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatibilityTestBase.java
index 44527a2..952bae6 100644
--- a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatibilityTestBase.java
+++ b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatibilityTestBase.java
@@ -40,35 +40,35 @@
R8_COMPAT,
R8_COMPAT_CF,
R8,
- R8_CF
- }
+ R8_CF;
- protected static boolean isR8(Shrinker shrinker) {
- return shrinker == Shrinker.R8_COMPAT
- || shrinker == Shrinker.R8_COMPAT_CF
- || shrinker == Shrinker.R8
- || shrinker == Shrinker.R8_CF;
- }
-
- protected static boolean generatesDex(Shrinker shrinker) {
- return shrinker == Shrinker.PROGUARD6_THEN_D8
- || shrinker == Shrinker.R8_COMPAT
- || shrinker == Shrinker.R8;
- }
-
- protected static boolean generatesCf(Shrinker shrinker) {
- return shrinker == Shrinker.PROGUARD5
- || shrinker == Shrinker.PROGUARD6
- || shrinker == Shrinker.R8_COMPAT_CF
- || shrinker == Shrinker.R8_CF;
- }
-
- protected static Backend toBackend(Shrinker shrinker) {
- if (generatesDex(shrinker)) {
- return Backend.DEX;
+ public boolean isR8() {
+ return this == R8_COMPAT
+ || this == R8_COMPAT_CF
+ || this == R8
+ || this == R8_CF;
}
- assert generatesCf(shrinker);
- return Backend.CF;
+
+ public boolean generatesDex() {
+ return this == PROGUARD6_THEN_D8
+ || this == R8_COMPAT
+ || this == R8;
+ }
+
+ public boolean generatesCf() {
+ return this == PROGUARD5
+ || this == PROGUARD6
+ || this == R8_COMPAT_CF
+ || this == R8_CF;
+ }
+
+ public Backend toBackend() {
+ if (generatesDex()) {
+ return Backend.DEX;
+ }
+ assert generatesCf();
+ return Backend.CF;
+ }
}
protected AndroidApp runShrinker(
diff --git a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/defaultctor/ExternalizableTest.java b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/defaultctor/ExternalizableTest.java
index fe2a93f..dcb1970c 100644
--- a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/defaultctor/ExternalizableTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/defaultctor/ExternalizableTest.java
@@ -274,7 +274,7 @@
@Test
public void testExternalizable() throws Exception {
// TODO(b/116735204): R8 should keep default ctor() of classes that implement Externalizable
- if (isR8(shrinker)) {
+ if (shrinker.isR8()) {
return;
}
@@ -294,9 +294,9 @@
AndroidApp processedApp = runShrinker(shrinker, CLASSES_FOR_EXTERNALIZABLE, config);
// TODO(b/117302947): Need to update ART binary.
- if (generatesCf(shrinker)) {
+ if (shrinker.generatesCf()) {
String output = runOnVM(
- processedApp, ExternalizableTestMain.class.getCanonicalName(), toBackend(shrinker));
+ processedApp, ExternalizableTestMain.class.getCanonicalName(), shrinker.toBackend());
assertEquals(javaOutput.trim(), output.trim());
}
@@ -311,7 +311,7 @@
public void testSerializable() throws Exception {
// TODO(b/116735204): R8 should keep default ctor() of first non-serializable superclass of
// serializable class.
- if (isR8(shrinker)) {
+ if (shrinker.isR8()) {
return;
}
@@ -330,9 +330,9 @@
AndroidApp processedApp = runShrinker(shrinker, CLASSES_FOR_SERIALIZABLE, config);
// TODO(b/117302947): Need to update ART binary.
- if (generatesCf(shrinker)) {
+ if (shrinker.generatesCf()) {
String output = runOnVM(
- processedApp, SerializableTestMain.class.getCanonicalName(), toBackend(shrinker));
+ processedApp, SerializableTestMain.class.getCanonicalName(), shrinker.toBackend());
assertEquals(javaOutput.trim(), output.trim());
}
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
index e6de7cc..5ea7769 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
@@ -104,8 +104,8 @@
assertTrue(methodSubject.getMethod().accessFlags.isPublic());
classSubject = codeInspector.clazz(ClassForSubsequent.class);
- if (isR8(shrinker)) {
- // TODO(b/72109068): ClassForIf#nonPublicMethod becomes public, and -if rule is not applied
+ if (shrinker.isR8()) {
+ // TODO(b/117330692): ClassForIf#nonPublicMethod becomes public, and -if rule is not applied
// at the 2nd tree shaking.
assertThat(classSubject, not(isPresent()));
return;
@@ -143,8 +143,8 @@
assertTrue(methodSubject.getMethod().accessFlags.isPublic());
classSubject = codeInspector.clazz(ClassForSubsequent.class);
- if (isR8(shrinker)) {
- // TODO(b/72109068): ClassForIf#nonPublicMethod becomes public, and -if rule is not applied
+ if (shrinker.isR8()) {
+ // TODO(b/117330692): ClassForIf#nonPublicMethod becomes public, and -if rule is not applied
// at the 2nd tree shaking.
assertThat(classSubject, not(isPresent()));
return;
@@ -219,8 +219,8 @@
assertThat(methodSubject, not(isPresent()));
methodSubject = classSubject.method(nonPublicMethod);
assertThat(methodSubject, isPresent());
- if (isR8(shrinker)) {
- // TODO(b/72109068): if kept in the 1st tree shaking, should not be publicized.
+ if (shrinker.isR8()) {
+ // TODO(b/117330692): if kept in the 1st tree shaking, should not be publicized.
assertTrue(methodSubject.getMethod().accessFlags.isPublic());
return;
}