Allow signature removal when having -dontoptimize
Bug: 221404266
Change-Id: Ib29bbab33516e3d18b5cf2574b8c617ce04732ff
diff --git a/src/main/java/com/android/tools/r8/shaking/KeepInfo.java b/src/main/java/com/android/tools/r8/shaking/KeepInfo.java
index c3165ad..5325d08 100644
--- a/src/main/java/com/android/tools/r8/shaking/KeepInfo.java
+++ b/src/main/java/com/android/tools/r8/shaking/KeepInfo.java
@@ -156,7 +156,8 @@
if (!configuration.isKeepAttributesSignatureEnabled()) {
return true;
}
- return !(configuration.isForceProguardCompatibilityEnabled() || isPinned(configuration));
+ return !(configuration.isForceProguardCompatibilityEnabled()
+ || !isShrinkingAllowed(configuration));
}
public boolean isEnclosingMethodAttributeRemovalAllowed(
diff --git a/src/test/java/com/android/tools/r8/graph/genericsignature/GenericSignatureDontOptimizeTest.java b/src/test/java/com/android/tools/r8/graph/genericsignature/GenericSignatureDontOptimizeTest.java
index 7c55472..94adea2 100644
--- a/src/test/java/com/android/tools/r8/graph/genericsignature/GenericSignatureDontOptimizeTest.java
+++ b/src/test/java/com/android/tools/r8/graph/genericsignature/GenericSignatureDontOptimizeTest.java
@@ -7,6 +7,7 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -45,11 +46,10 @@
.addKeepClassRules(Foo.class)
.addKeepMainRule(Main.class)
.addDontOptimize()
- .run(parameters.getRuntime(), Main.class)
+ .compile()
.inspect(this::inspect)
- // TODO(b/221404266): We should fail with an exception since the parameterized generic type
- // should be removed.
- .assertSuccessWithOutputLines(EXPECTED);
+ .run(parameters.getRuntime(), Main.class)
+ .assertFailureWithErrorThatThrows(ClassCastException.class);
}
private void inspect(CodeInspector inspector) {
@@ -57,11 +57,9 @@
assertThat(foo, isPresent());
assertEquals("<T:Ljava/lang/Object;>Ljava/lang/Object;", foo.getFinalSignatureAttribute());
- // TODO(b/221404266): We should not keep generic signatures when having -dontoptimize
ClassSubject main$1 = inspector.clazz(Main.class.getTypeName() + "$1");
assertThat(main$1, isPresent());
- assertEquals(
- "L" + binaryName(Foo.class) + "<Ljava/lang/String;>;", main$1.getFinalSignatureAttribute());
+ assertNull(main$1.getFinalSignatureAttribute());
}
public static class Foo<T> {