Transition dependent items for instantiated annotation

Bug: 162900580
Change-Id: If2faacbfb6515ac06a3ebdfdb17ee1fd077df93f
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 5c0f735..4422c72 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -2007,6 +2007,12 @@
         clazz, context, instantiationReason, keepReason, appInfo);
   }
 
+  void markAnnotationAsInstantiated(DexProgramClass clazz, KeepReasonWitness witness) {
+    assert clazz.isAnnotation();
+    markTypeAsLive(clazz, witness);
+    transitionDependentItemsForInstantiatedInterface(clazz);
+  }
+
   void markInterfaceAsInstantiated(DexProgramClass clazz, KeepReasonWitness witness) {
     assert !clazz.isAnnotation();
     assert clazz.isInterface();
diff --git a/src/main/java/com/android/tools/r8/shaking/EnqueuerWorklist.java b/src/main/java/com/android/tools/r8/shaking/EnqueuerWorklist.java
index 3c9649d..2bc8459 100644
--- a/src/main/java/com/android/tools/r8/shaking/EnqueuerWorklist.java
+++ b/src/main/java/com/android/tools/r8/shaking/EnqueuerWorklist.java
@@ -101,7 +101,7 @@
 
     @Override
     public void run(Enqueuer enqueuer) {
-      enqueuer.markTypeAsLive(target, reason);
+      enqueuer.markAnnotationAsInstantiated(target, reason);
     }
   }
 
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepTest.java
index 3986b38..0f80128 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepTest.java
@@ -6,12 +6,10 @@
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThrows;
 
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
-import com.android.tools.r8.kotlin.KotlinClassMetadataReader.MetadataError;
 import com.android.tools.r8.shaking.ProguardKeepAttributes;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
@@ -57,11 +55,7 @@
         .addKeepRules("-if class *", "-keep class kotlin.Metadata { *; }")
         .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
         .compile()
-        .inspect(
-            codeInspector -> {
-              // TODO(b/162900580): This should be kept or the test refined.
-              assertThrows(MetadataError.class, () -> inspect(codeInspector));
-            });
+        .inspect(this::inspect);
   }
 
   private void inspect(CodeInspector inspector) {
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfRuleWithKeepAllTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfRuleWithKeepAllTest.java
index 687e64c..c4dd92f 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfRuleWithKeepAllTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfRuleWithKeepAllTest.java
@@ -5,7 +5,6 @@
 package com.android.tools.r8.shaking.ifrule;
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 
@@ -57,16 +56,14 @@
               assertThat(codeInspector.clazz(DirectlyKept.class), isPresent());
               final ClassSubject keptByIf = codeInspector.clazz(KeptByIf.class);
               assertThat(keptByIf, isPresent());
-              // TODO(b/162900580): key() should have been kept.
-              assertEquals(0, keptByIf.allMethods().size());
+              assertEquals(1, keptByIf.allMethods().size());
             })
         .addRunClasspathFiles(buildOnDexRuntime(parameters, Main.class))
-        .run(parameters.getRuntime(), Main.class, KeptByIf.class.getTypeName())
-        // TODO(b/162900580): Should succeed with "Hello World!"
-        .assertFailureWithErrorThatMatches(containsString("NoSuchMethodError"));
+        .run(parameters.getRuntime(), Main.class)
+        .assertSuccessWithOutputLines("Hello World!");
   }
 
-  @KeptByIf
+  @KeptByIf()
   public static class DirectlyKept {
     final int foo = 42;
   }