From cc355f7e108fe222d957f1dbc8c3ba4eeb7ed941 Mon Sep 17 00:00:00 2001 From: Michal Kordas Date: Sat, 23 May 2015 22:47:56 +0200 Subject: [PATCH] Fix NeedBraces check not requiring braces in multiline statements when using allowSingleLineStatement option. #895 --- .../checkstyle/checks/blocks/NeedBracesCheck.java | 10 +++++++--- .../checkstyle/checks/blocks/NeedBracesCheckTest.java | 2 ++ .../checkstyle/InputBracesSingleLineStatements.java | 9 +++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/blocks/NeedBracesCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/blocks/NeedBracesCheck.java index 644fe0e13..5a82774a0 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/blocks/NeedBracesCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/blocks/NeedBracesCheck.java @@ -299,9 +299,13 @@ public class NeedBracesCheck extends Check { boolean result = false; final DetailAST ifCondition = literalIf.findFirstToken(TokenTypes.EXPR); if (literalIf.getParent().getType() == TokenTypes.SLIST) { - DetailAST block = literalIf.getLastChild(); - if (block.getType() != TokenTypes.LITERAL_RETURN) { - block = literalIf.getLastChild().getPreviousSibling(); + final DetailAST literalIfLastChild = literalIf.getLastChild(); + final DetailAST block; + if (literalIfLastChild.getType() == TokenTypes.LITERAL_ELSE) { + block = literalIfLastChild.getPreviousSibling(); + } + else { + block = literalIfLastChild; } result = ifCondition.getLineNo() == block.getLineNo(); } diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/blocks/NeedBracesCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/blocks/NeedBracesCheckTest.java index 9abdd0b96..8979c0ba0 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/blocks/NeedBracesCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/blocks/NeedBracesCheckTest.java @@ -67,6 +67,8 @@ public class NeedBracesCheckTest extends BaseCheckTestSupport { "46: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"), "53: " + getCheckMessage(MSG_KEY_NEED_BRACES, "do"), "59: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"), + "88: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"), + "92: " + getCheckMessage(MSG_KEY_NEED_BRACES, "else"), }; verify(checkConfig, getPath("InputBracesSingleLineStatements.java"), expected); } diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/InputBracesSingleLineStatements.java b/src/test/resources/com/puppycrawl/tools/checkstyle/InputBracesSingleLineStatements.java index 1c2b54387..1711f5879 100644 --- a/src/test/resources/com/puppycrawl/tools/checkstyle/InputBracesSingleLineStatements.java +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/InputBracesSingleLineStatements.java @@ -83,4 +83,13 @@ public class InputBracesSingleLineStatements else System.out.println("no"); for (;;); } + + private int testMissingWarnings() { + if (true) + throw new RuntimeException(); + if (true) { + return 1; + } else + return 2; + } }