From 9048164b509762ed54291b18fbd2e7be27443b95 Mon Sep 17 00:00:00 2001 From: Liam Miller-Cushon Date: Fri, 11 Nov 2016 02:21:23 +0000 Subject: Fix tree pruning inside enum constants -- MOS_MIGRATED_REVID=138831285 --- .../build/java/turbine/javac/TreePruner.java | 1 + .../build/java/turbine/javac/JavacTurbineTest.java | 44 ++++++++++++++++++++++ 2 files changed, 45 insertions(+) (limited to 'src/java_tools') 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 {", + " INSTANCE {", + " @Override", + " public boolean test(String s) {", + " return NoSuch.method();", + " }", + " }", + "}"); + + compile(); + + Map outputs = collectOutputs(); + + String text = textify(outputs.get("P.class")); + String[] expected = { + "// class version 52.0 (52)", + "// access flags 0x4420", + "// signature Ljava/lang/Enum;Ljava/util/function/Predicate;", + "// declaration: P extends java.lang.Enum

" + + " implements java.util.function.Predicate", + "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)); + } } -- cgit v1.2.3