diff options
author | 2016-03-29 19:04:16 +0000 | |
---|---|---|
committer | 2016-03-30 08:15:01 +0000 | |
commit | 9c3e23fddac77489922cc0d0fe9cd3b5b17471da (patch) | |
tree | d7dc3f5ce122d7de96a56bba7613afbb158a2dca | |
parent | cadba0c2e44fe7895083b8b72ff6ce4a351772b5 (diff) |
Don't prune qualified super constructors invocations in chained constructors
--
MOS_MIGRATED_REVID=118488791
2 files changed, 39 insertions, 4 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 b25d4e79ea..1e6acea1b6 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 @@ -32,6 +32,7 @@ import com.sun.tools.javac.tree.JCTree.JCBlock; import com.sun.tools.javac.tree.JCTree.JCClassDecl; import com.sun.tools.javac.tree.JCTree.JCExpression; import com.sun.tools.javac.tree.JCTree.JCExpressionStatement; +import com.sun.tools.javac.tree.JCTree.JCFieldAccess; import com.sun.tools.javac.tree.JCTree.JCIdent; import com.sun.tools.javac.tree.JCTree.JCMethodDecl; import com.sun.tools.javac.tree.JCTree.JCMethodInvocation; @@ -126,11 +127,18 @@ public class TreePruner { if (expr.getKind() != Kind.METHOD_INVOCATION) { return false; } - JCExpression select = ((JCMethodInvocation) expr).getMethodSelect(); - if (select.getKind() != Kind.IDENTIFIER) { - return false; + JCExpression method = ((JCMethodInvocation) expr).getMethodSelect(); + Name name; + switch (method.getKind()) { + case IDENTIFIER: + name = ((JCIdent) method).getName(); + break; + case MEMBER_SELECT: + name = ((JCFieldAccess) method).getIdentifier(); + break; + default: + return false; } - Name name = ((JCIdent) select).getName(); return name.contentEquals("this") || name.contentEquals("super"); } diff --git a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/TreePrunerTest.java b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/TreePrunerTest.java index 9cd3acb6c5..5f3962b9ad 100644 --- a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/TreePrunerTest.java +++ b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/TreePrunerTest.java @@ -305,4 +305,31 @@ public class TreePrunerTest { private String prettyPrint(JCCompilationUnit tree) { return tree.toString().trim(); } + + @Test + public void qualifiedSuperConstructorChaining() { + String[] lines = { + "class Test {", + " class Inner {", + " Inner(OuterInstance outer) {", + " outer.super();", + " }", + " }", + "}", + }; + JCCompilationUnit tree = parseLines(lines); + TreePruner.prune(tree); + String[] expected = { + "class Test {", + " ", + " class Inner {", + " ", + " Inner(OuterInstance outer) {", + " outer.super();", + " }", + " }", + "}", + }; + assertThat(prettyPrint(tree)).isEqualTo(Joiner.on('\n').join(expected)); + } } |