diff options
author | 2016-11-11 02:21:23 +0000 | |
---|---|---|
committer | 2016-11-11 10:05:11 +0000 | |
commit | 9048164b509762ed54291b18fbd2e7be27443b95 (patch) | |
tree | 5037f1fe8ab7f3cf1763e8adbe4badfb03c3ae83 /src/java_tools | |
parent | 0c0735a12f4491a2594bde7c6ac26c1a4d5b6bd9 (diff) |
Fix tree pruning inside enum constants
--
MOS_MIGRATED_REVID=138831285
Diffstat (limited to 'src/java_tools')
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)); + } } |