diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/FallThroughCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/FallThroughCheck.java index 06cd799b7..98c535152 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/FallThroughCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/FallThroughCheck.java @@ -267,7 +267,13 @@ public class FallThroughCheck extends AbstractCheck { } if (!isTerminated) { - isTerminated = isTerminated(ast.getFirstChild(), + DetailAST firstChild = ast.getFirstChild(); + + if (firstChild.getType() == TokenTypes.RESOURCE_SPECIFICATION) { + firstChild = firstChild.getNextSibling(); + } + + isTerminated = isTerminated(firstChild, useBreak, useContinue); DetailAST catchStmt = ast.findFirstToken(TokenTypes.LITERAL_CATCH); diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/FallThroughCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/FallThroughCheckTest.java index de5a2f515..3c5f41367 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/FallThroughCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/FallThroughCheckTest.java @@ -132,6 +132,11 @@ public class FallThroughCheckTest extends BaseCheckTestSupport { "424:9: " + getCheckMessage(MSG_FALL_THROUGH), "436:9: " + getCheckMessage(MSG_FALL_THROUGH), "446:9: " + getCheckMessage(MSG_FALL_THROUGH), + "491:9: " + getCheckMessage(MSG_FALL_THROUGH), + "495:9: " + getCheckMessage(MSG_FALL_THROUGH), + "501:9: " + getCheckMessage(MSG_FALL_THROUGH), + "507:9: " + getCheckMessage(MSG_FALL_THROUGH), + "514:9: " + getCheckMessage(MSG_FALL_THROUGH), }; verify(checkConfig, getPath("InputFallThrough.java"), diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/coding/InputFallThrough.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/coding/InputFallThrough.java index 246f2310f..1921aa4e9 100644 --- a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/coding/InputFallThrough.java +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/coding/InputFallThrough.java @@ -448,4 +448,77 @@ public class InputFallThrough break; } } + + void tryResource() throws Exception { + switch (hashCode()) { + case 1: + try (final Resource resource = new Resource()) { + return; + } + case 2: + try (final Resource resource = new Resource()) { + return; + } + finally { + return; + } + case 3: + try (final Resource resource = new Resource()) { + return; + } + catch (Exception ex) { + return; + } + case 4: + try (final Resource resource = new Resource()) { + } + finally { + return; + } + case 5: + try (final Resource resource = new Resource()) { + return; + } + finally { + } + case 6: + try (final Resource resource = new Resource()) { + } + catch (Exception ex) { + return; + } + // fallthru + case 7: + try (final Resource resource = new Resource()) { + } + // fallthru + case 8: + try (final Resource resource = new Resource()) { + } + finally { + } + // fallthru + case 9: + try (final Resource resource = new Resource()) { + } + catch (Exception ex) { + } + // fallthru + case 10: + try (final Resource resource = new Resource()) { + return; + } + catch (Exception ex) { + } + // fallthru + default: + break; + } + } + + private static class Resource implements AutoCloseable { + @Override + public void close() throws Exception { + } + } }