aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/java_tools
diff options
context:
space:
mode:
authorGravatar Liam Miller-Cushon <cushon@google.com>2016-11-11 02:21:23 +0000
committerGravatar Klaus Aehlig <aehlig@google.com>2016-11-11 10:05:11 +0000
commit9048164b509762ed54291b18fbd2e7be27443b95 (patch)
tree5037f1fe8ab7f3cf1763e8adbe4badfb03c3ae83 /src/java_tools
parent0c0735a12f4491a2594bde7c6ac26c1a4d5b6bd9 (diff)
Fix tree pruning inside enum constants
-- MOS_MIGRATED_REVID=138831285
Diffstat (limited to 'src/java_tools')
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/TreePruner.java1
-rw-r--r--src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java44
2 files changed, 45 insertions, 0 deletions
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/TreePruner.java b/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/TreePruner.java
index 1e6acea1b6..0c1369972c 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/TreePruner.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/TreePruner.java
@@ -105,6 +105,7 @@ public class TreePruner {
public void visitVarDef(JCVariableDecl tree) {
if ((tree.mods.flags & Flags.ENUM) == Flags.ENUM) {
// javac desugars enum constants into fields during parsing
+ super.visitVarDef(tree);
return;
}
// drop field initializers unless the field looks like a JLS ยง4.12.4 constant variable
diff --git a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java
index a4de694950..39fe109e7c 100644
--- a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java
+++ b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java
@@ -1297,4 +1297,48 @@ public class JavacTurbineTest {
};
assertThat(text).isEqualTo(Joiner.on('\n').join(expected));
}
+
+ @Test
+ public void enumDecl() throws Exception {
+ addSourceLines(
+ "P.java",
+ "import java.util.function.Predicate;",
+ "enum P implements Predicate<String> {",
+ " INSTANCE {",
+ " @Override",
+ " public boolean test(String s) {",
+ " return NoSuch.method();",
+ " }",
+ " }",
+ "}");
+
+ compile();
+
+ Map<String, byte[]> outputs = collectOutputs();
+
+ String text = textify(outputs.get("P.class"));
+ String[] expected = {
+ "// class version 52.0 (52)",
+ "// access flags 0x4420",
+ "// signature Ljava/lang/Enum<LP;>;Ljava/util/function/Predicate<Ljava/lang/String;>;",
+ "// declaration: P extends java.lang.Enum<P>"
+ + " implements java.util.function.Predicate<java.lang.String>",
+ "abstract enum P extends java/lang/Enum implements java/util/function/Predicate {",
+ "",
+ " // access flags 0x4000",
+ " enum INNERCLASS P$1 null null",
+ "",
+ " // access flags 0x4019",
+ " public final static enum LP; INSTANCE",
+ "",
+ " // access flags 0x9",
+ " public static values()[LP;",
+ "",
+ " // access flags 0x9",
+ " public static valueOf(Ljava/lang/String;)LP;",
+ "}",
+ ""
+ };
+ assertThat(text).isEqualTo(Joiner.on('\n').join(expected));
+ }
}