Mark annotations as kept if we are running with noShrinking
Bug: 183019116
Change-Id: I3e4963d20c3ae70ca510b229d1fe76b655ec3261
diff --git a/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java b/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
index 34c11ee..a561761 100644
--- a/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
+++ b/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
@@ -72,6 +72,10 @@
DexDefinition holder,
DexAnnotation annotation,
boolean isAnnotationTypeLive) {
+ // If we cannot run the AnnotationRemover we are keeping the annotation.
+ if (!appView.options().isShrinking()) {
+ return true;
+ }
ProguardKeepAttributes config =
appView.options().getProguardConfiguration() != null
? appView.options().getProguardConfiguration().getKeepAttributes()
diff --git a/src/test/java/com/android/tools/r8/missingclasses/MissingClassReferencedFromThrowsClauseWithNoShrinkingTest.java b/src/test/java/com/android/tools/r8/missingclasses/MissingClassReferencedFromThrowsClauseWithNoShrinkingTest.java
index daf00dd..b9d0ef6 100644
--- a/src/test/java/com/android/tools/r8/missingclasses/MissingClassReferencedFromThrowsClauseWithNoShrinkingTest.java
+++ b/src/test/java/com/android/tools/r8/missingclasses/MissingClassReferencedFromThrowsClauseWithNoShrinkingTest.java
@@ -4,12 +4,15 @@
package com.android.tools.r8.missingclasses;
-import static org.hamcrest.CoreMatchers.containsString;
-
import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.diagnostic.MissingDefinitionContext;
+import com.android.tools.r8.diagnostic.internal.MissingDefinitionMethodContextImpl;
+import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.references.Reference;
import com.android.tools.r8.utils.DescriptorUtils;
+import com.google.common.collect.ImmutableList;
import org.junit.Test;
public class MissingClassReferencedFromThrowsClauseWithNoShrinkingTest
@@ -18,6 +21,14 @@
private static final String NEW_A_DESCRIPTOR = "Lfoo/a;";
private static final String NEW_B_DESCRIPTOR = "Lfoo/b;";
+ private static final MissingDefinitionContext referencedFrom =
+ MissingDefinitionMethodContextImpl.builder()
+ .setMethodContext(
+ Reference.method(
+ Reference.classFromDescriptor("Lfoo/a;"), "foo", ImmutableList.of(), null))
+ .setOrigin(Origin.unknown())
+ .build();
+
public MissingClassReferencedFromThrowsClauseWithNoShrinkingTest(TestParameters parameters) {
super(parameters);
}
@@ -26,12 +37,7 @@
public void testNoShrinking() throws Exception {
compileWithExpectedDiagnostics(
Main.class,
- diagnostics -> {
- // TODO(b/183019116): Should not report the type as missing.
- diagnostics.assertErrorMessageThatMatches(
- containsString(
- "Failed lookup of non-missing type: " + MissingClass.class.getTypeName()));
- },
+ diagnostics -> inspectDiagnosticsWithNoRules(diagnostics, referencedFrom),
b -> {
b.addProgramClassFileData(
transformer(A.class)