From 10f348bbfd91fd8c2bd7776aff3c03f549380a44 Mon Sep 17 00:00:00 2001 From: Jon Bake Date: Fri, 18 Dec 2015 17:41:23 -0600 Subject: [PATCH] Issue #2211: OneStatementPerLine has false match with try-with-resources --- .../coding/OneStatementPerLineCheck.java | 5 +- .../coding/OneStatementPerLineCheckTest.java | 2 + .../coding/InputOneStatementPerLine2.java | 46 +++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/OneStatementPerLineCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/OneStatementPerLineCheck.java index d613fefff..c1b991179 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/OneStatementPerLineCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/OneStatementPerLineCheck.java @@ -117,7 +117,10 @@ public final class OneStatementPerLineCheck extends Check { switch (ast.getType()) { case TokenTypes.SEMI: DetailAST currentStatement = ast; - if (isMultilineStatement(currentStatement)) { + final boolean hasResourcesPrevSibling = + currentStatement.getPreviousSibling() != null + && currentStatement.getPreviousSibling().getType() == TokenTypes.RESOURCES; + if (!hasResourcesPrevSibling && isMultilineStatement(currentStatement)) { currentStatement = ast.getPreviousSibling(); } if (isOnTheSameLine(currentStatement, lastStatementEnd, diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/OneStatementPerLineCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/OneStatementPerLineCheckTest.java index 36919eaa2..b7428855d 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/OneStatementPerLineCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/OneStatementPerLineCheckTest.java @@ -79,6 +79,8 @@ public class OneStatementPerLineCheckTest extends BaseCheckTestSupport { "81:10: " + getCheckMessage(MSG_KEY), "90:28: " + getCheckMessage(MSG_KEY), "135:39: " + getCheckMessage(MSG_KEY), + "168:110: " + getCheckMessage(MSG_KEY), + "179:107: " + getCheckMessage(MSG_KEY), }; verify(checkConfig, diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/coding/InputOneStatementPerLine2.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/coding/InputOneStatementPerLine2.java index 9bbd91ff5..161dcdf89 100644 --- a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/coding/InputOneStatementPerLine2.java +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/coding/InputOneStatementPerLine2.java @@ -134,4 +134,50 @@ public class InputOneStatementPerLine2 { ; n++, k--) { var1++; var2++; } } + + /** + * Multiple statements within try-with-resource on a separate line is legal. + * @see OneStatementPerLine: false match with try-with-resources + */ + private void issue2211pass() { + try( + AutoCloseable i = new java.io.StringReader(""); + AutoCloseable k = new java.io.StringReader(""); + ) { + } catch (Exception e1) { + } + } + + /** + * Multiple statements within try-with-resource on a separate line is legal. Added per PR comment: + * @see Please add UT cases + */ + private void issue2211pass2() { + try( AutoCloseable i = new java.io.StringReader(""); + AutoCloseable k = new java.io.StringReader("");) { + } catch (Exception e1) { + } + } + + /** + * Multiple statements within try-with-resource on next line after try is illegal. + * @see OneStatementPerLine: false match with try-with-resources + */ + private void issue2211fail() { + try( + AutoCloseable i = new java.io.StringReader("");AutoCloseable k = new java.io.StringReader(""); + ) { + } catch (Exception e1) { + } + } + + /** + * Multiple statements within try-with-resource on a same line as try is illegal. Added per PR comment: + * @see Please add UT cases + */ + private void issue2211fail2() { + try( AutoCloseable i = new java.io.StringReader("");AutoCloseable k = new java.io.StringReader("");) { + } catch (Exception e1) { + } + } }