Add test that all keep reasons have print info.

Bug: 124019003
Change-Id: I0f292f3d2c29f842b9a92e33f0df7b8ffda48562
diff --git a/src/main/java/com/android/tools/r8/experimental/graphinfo/GraphEdgeInfo.java b/src/main/java/com/android/tools/r8/experimental/graphinfo/GraphEdgeInfo.java
index 88b3b4b..ca3a732 100644
--- a/src/main/java/com/android/tools/r8/experimental/graphinfo/GraphEdgeInfo.java
+++ b/src/main/java/com/android/tools/r8/experimental/graphinfo/GraphEdgeInfo.java
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.experimental.graphinfo;
 
+import com.android.tools.r8.errors.Unreachable;
+
 public class GraphEdgeInfo {
 
   // TODO(b/120959039): Simplify these. Most of the information is present in the source node.
@@ -34,6 +36,40 @@
     return kind;
   }
 
+  public String getInfoPrefix() {
+    switch (edgeKind()) {
+      case KeepRule:
+      case CompatibilityRule:
+        return "referenced in keep rule";
+      case InstantiatedIn:
+        return "instantiated in";
+      case InvokedViaSuper:
+        return "invoked via super from";
+      case TargetedBySuper:
+        return "targeted by super from";
+      case InvokedFrom:
+        return "invoked from";
+      case InvokedFromLambdaCreatedIn:
+        return "invoked from lambda created in";
+      case AnnotatedOn:
+        return "annotated on";
+      case ReferencedFrom:
+        return "referenced from";
+      case ReflectiveUseFrom:
+        return "reflected from";
+      case ReachableFromLiveType:
+        return "reachable from";
+      case ReferencedInAnnotation:
+        return "referenced in annotation";
+      case IsLibraryMethod:
+        return "defined in library";
+      case MethodHandleUseFrom:
+        return "referenced by method handle";
+      default:
+        throw new Unreachable("Unexpected edge kind: " + edgeKind());
+    }
+  }
+
   @Override
   public String toString() {
     return "{edge-type:" + kind.toString() + "}";
diff --git a/src/main/java/com/android/tools/r8/shaking/WhyAreYouKeepingConsumer.java b/src/main/java/com/android/tools/r8/shaking/WhyAreYouKeepingConsumer.java
index abd22bf..89a6f0e 100644
--- a/src/main/java/com/android/tools/r8/shaking/WhyAreYouKeepingConsumer.java
+++ b/src/main/java/com/android/tools/r8/shaking/WhyAreYouKeepingConsumer.java
@@ -190,42 +190,10 @@
   }
 
   private void printEdge(GraphNode node, GraphEdgeInfo info, Formatter formatter) {
-    formatter.addReason("is " + getInfoPrefix(info) + ":");
+    formatter.addReason("is " + info.getInfoPrefix() + ":");
     addNodeMessage(node, formatter);
   }
 
-  private String getInfoPrefix(GraphEdgeInfo info) {
-    switch (info.edgeKind()) {
-      case KeepRule:
-      case CompatibilityRule:
-        return "referenced in keep rule";
-      case InstantiatedIn:
-        return "instantiated in";
-      case InvokedViaSuper:
-        return "invoked via super from";
-      case TargetedBySuper:
-        return "targeted by super from";
-      case InvokedFrom:
-        return "invoked from";
-      case InvokedFromLambdaCreatedIn:
-        return "invoked from lambda created in";
-      case ReferencedFrom:
-        return "referenced from";
-      case ReflectiveUseFrom:
-        return "reflected from";
-      case ReachableFromLiveType:
-        return "reachable from";
-      case ReferencedInAnnotation:
-        return "referenced in annotation";
-      case IsLibraryMethod:
-        return "defined in library";
-      case MethodHandleUseFrom:
-        return "referenced by method handle";
-      default:
-        throw new Unreachable("Unexpected edge kind: " + info.edgeKind());
-    }
-  }
-
   private String getNodeString(GraphNode node) {
     if (node instanceof ClassGraphNode) {
       return DescriptorUtils.descriptorToJavaType(
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeepReasonsTest.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeepReasonsTest.java
new file mode 100644
index 0000000..ebaa1a9
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeepReasonsTest.java
@@ -0,0 +1,21 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.shaking.keptgraph;
+
+import static org.junit.Assert.assertNotNull;
+
+import com.android.tools.r8.experimental.graphinfo.GraphEdgeInfo;
+import com.android.tools.r8.experimental.graphinfo.GraphEdgeInfo.EdgeKind;
+import org.junit.Test;
+
+public class KeepReasonsTest {
+
+  @Test
+  public void testAllReasonsHavePrintInfo() {
+    for (EdgeKind value : EdgeKind.values()) {
+      assertNotNull(new GraphEdgeInfo(value).getInfoPrefix());
+    }
+  }
+
+}