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());
+ }
+ }
+
+}