From bf5e9abf842c4858b8b0b4b2ad3ea3ebcea47d8e Mon Sep 17 00:00:00 2001 From: cushon Date: Fri, 2 Dec 2016 15:01:22 -0800 Subject: [PATCH] Recognize conditional expressions in FilesLinesLeak MOE_MIGRATED_REVID=140898154 --- .../bugpatterns/FilesLinesLeak.java | 7 ++++++- .../bugpatterns/FilesLinesLeakTest.java | 20 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/FilesLinesLeak.java b/core/src/main/java/com/google/errorprone/bugpatterns/FilesLinesLeak.java index cfe75709b75..0a5d021edc0 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/FilesLinesLeak.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/FilesLinesLeak.java @@ -34,6 +34,7 @@ import com.sun.source.tree.StatementTree; import com.sun.source.tree.Tree; import com.sun.source.tree.VariableTree; +import com.sun.source.util.TreePath; import com.sun.tools.javac.code.Symbol; import com.sun.tools.javac.tree.JCTree; import javax.lang.model.element.ElementKind; @@ -90,7 +91,11 @@ public Description matchMethodInvocation(MethodInvocationTree tree, VisitorState } private boolean inTWR(VisitorState state) { - Symbol sym = ASTHelpers.getSymbol(state.getPath().getParentPath().getLeaf()); + TreePath path = state.getPath().getParentPath(); + while (path.getLeaf().getKind() == Tree.Kind.CONDITIONAL_EXPRESSION) { + path = path.getParentPath(); + } + Symbol sym = ASTHelpers.getSymbol(path.getLeaf()); return sym != null && sym.getKind() == ElementKind.RESOURCE_VARIABLE; } } diff --git a/core/src/test/java/com/google/errorprone/bugpatterns/FilesLinesLeakTest.java b/core/src/test/java/com/google/errorprone/bugpatterns/FilesLinesLeakTest.java index 132dcba2b80..8f8ed5410c4 100644 --- a/core/src/test/java/com/google/errorprone/bugpatterns/FilesLinesLeakTest.java +++ b/core/src/test/java/com/google/errorprone/bugpatterns/FilesLinesLeakTest.java @@ -130,4 +130,24 @@ public void fixVariable() throws IOException { "}") .doTest(); } + + @Test + public void ternary() { + testHelper + .addSourceLines( + "Test.java", + "import java.io.IOException;", + "import java.nio.file.Files;", + "import java.nio.file.Path;", + "import java.util.stream.Collectors;", + "import java.util.stream.Stream;", + "class Test {", + " String f(Path p) throws IOException {", + " try (Stream stream = true ? Files.lines(p) : null) {", + " return stream.collect(Collectors.joining(\", \"));", + " }", + " }", + "}") + .doTest(); + } }