Keep enum values if an enum is referenced on an annotation on CF

Bug: 174826328
Change-Id: I0d04840070f5fc89211880dc41da16481ddd8094
diff --git a/src/main/java/com/android/tools/r8/graph/FieldAccessInfoImpl.java b/src/main/java/com/android/tools/r8/graph/FieldAccessInfoImpl.java
index 641ef08..c5f516b 100644
--- a/src/main/java/com/android/tools/r8/graph/FieldAccessInfoImpl.java
+++ b/src/main/java/com/android/tools/r8/graph/FieldAccessInfoImpl.java
@@ -185,7 +185,7 @@
   /** Returns true if this field is read by the program. */
   @Override
   public boolean isRead() {
-    return !readsWithContexts.isEmpty() || isReadFromAnnotation();
+    return !readsWithContexts.isEmpty() || isReadFromAnnotation() || isReadFromMethodHandle();
   }
 
   @Override
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 095ba07..4ee1bc6 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -4431,14 +4431,11 @@
                     fieldReference, new FieldAccessInfoImpl(fieldReference));
         fieldAccessInfo.setReadFromAnnotation();
         markStaticFieldAsLive(field, KeepReason.referencedInAnnotation(annotationHolder));
-        // When an annotation has a field of an enum type with a default value then Java VM
-        // will use the values() method on that enum class.
-        if (options.isGeneratingClassFiles()
-            && annotationHolder == dexItemFactory.annotationDefault) {
-          if (field.getHolder().isEnum()) {
-            markEnumValuesAsReachable(
-                field.getHolder(), KeepReason.referencedInAnnotation(annotationHolder));
-          }
+        // When an annotation has a field of an enum type the JVM will use the values() method on
+        // that enum class if the field is referenced.
+        if (options.isGeneratingClassFiles() && field.getHolder().isEnum()) {
+          markEnumValuesAsReachable(
+              field.getHolder(), KeepReason.referencedInAnnotation(annotationHolder));
         }
       } else {
         // There is no dispatch on annotations, so only keep what is directly referenced.
diff --git a/src/test/java/com/android/tools/r8/shaking/enums/EnumInAnnotationTest.java b/src/test/java/com/android/tools/r8/shaking/enums/EnumInAnnotationTest.java
index a3b3b86..d42d3ad 100644
--- a/src/test/java/com/android/tools/r8/shaking/enums/EnumInAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/enums/EnumInAnnotationTest.java
@@ -46,10 +46,7 @@
         .setMinApi(parameters.getApiLevel())
         .addKeepRuntimeVisibleAnnotations()
         .run(parameters.getRuntime(), Main.class)
-        .forCfRuntime(
-            result ->
-                result.assertFailureWithErrorThatThrows(EnumConstantNotPresentException.class))
-        .otherwise(result -> result.assertSuccessWithOutputLines("TEST_ONE"));
+        .assertSuccessWithOutputLines("TEST_ONE");
   }
 
   public enum Enum {