diff --git a/src/it/java/com/google/checkstyle/test/chapter4formatting/rule4842fallthrow/FallThroughTest.java b/src/it/java/com/google/checkstyle/test/chapter4formatting/rule4842fallthrow/FallThroughTest.java index 810267357..66ddd9dd9 100644 --- a/src/it/java/com/google/checkstyle/test/chapter4formatting/rule4842fallthrow/FallThroughTest.java +++ b/src/it/java/com/google/checkstyle/test/chapter4formatting/rule4842fallthrow/FallThroughTest.java @@ -29,11 +29,13 @@ public class FallThroughTest extends BaseCheckTestSupport{ final String[] expected = { "14:13: " + msg, "38:13: " + msg, + "47:13: " + msg, "53:13: " + msg, "70:13: " + msg, "87:13: " + msg, "105:13: " + msg, "123:13: " + msg, + "179:11: " + msg, "369:11: " + msg, "372:11: " + msg, "374:41: " + msg, diff --git a/src/it/resources/com/google/checkstyle/test/chapter4formatting/rule4842fallthrow/FallThroughInput.java b/src/it/resources/com/google/checkstyle/test/chapter4formatting/rule4842fallthrow/FallThroughInput.java index 2a2dddb33..790d031a1 100644 --- a/src/it/resources/com/google/checkstyle/test/chapter4formatting/rule4842fallthrow/FallThroughInput.java +++ b/src/it/resources/com/google/checkstyle/test/chapter4formatting/rule4842fallthrow/FallThroughInput.java @@ -44,7 +44,7 @@ public class FallThroughInput if (true) { return; } - case 14: + case 14: //warn if (true) { return; } else { @@ -176,7 +176,7 @@ public class FallThroughInput if (true) { return; } - case 14: + case 14: //warn if (true) { return; } else { 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 19a6d3fa1..77bb648cf 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 @@ -223,7 +223,10 @@ public class FallThroughCheck extends Check { if (isTerminated && elseStmt != null) { isTerminated = isTerminated(elseStmt.getFirstChild(), - useBreak, useContinue); + useBreak, useContinue); + } + else if (elseStmt == null) { + isTerminated = false; } return isTerminated; } 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 8dc787a9c..af0907798 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 @@ -38,11 +38,13 @@ public class FallThroughCheckTest extends BaseCheckTestSupport { final String[] expected = { "14:13: " + getCheckMessage(MSG_FALL_THROUGH), "38:13: " + getCheckMessage(MSG_FALL_THROUGH), + "47:13: " + getCheckMessage(MSG_FALL_THROUGH), "53:13: " + getCheckMessage(MSG_FALL_THROUGH), "70:13: " + getCheckMessage(MSG_FALL_THROUGH), "87:13: " + getCheckMessage(MSG_FALL_THROUGH), "105:13: " + getCheckMessage(MSG_FALL_THROUGH), "123:13: " + getCheckMessage(MSG_FALL_THROUGH), + "179:11: " + getCheckMessage(MSG_FALL_THROUGH), "369:11: " + getCheckMessage(MSG_FALL_THROUGH), "372:11: " + getCheckMessage(MSG_FALL_THROUGH), "374:40: " + getCheckMessage(MSG_FALL_THROUGH), @@ -64,12 +66,14 @@ public class FallThroughCheckTest extends BaseCheckTestSupport { final String[] expected = { "14:13: " + getCheckMessage(MSG_FALL_THROUGH), "38:13: " + getCheckMessage(MSG_FALL_THROUGH), + "47:13: " + getCheckMessage(MSG_FALL_THROUGH), "53:13: " + getCheckMessage(MSG_FALL_THROUGH), "70:13: " + getCheckMessage(MSG_FALL_THROUGH), "87:13: " + getCheckMessage(MSG_FALL_THROUGH), "105:13: " + getCheckMessage(MSG_FALL_THROUGH), "123:13: " + getCheckMessage(MSG_FALL_THROUGH), "123:13: " + getCheckMessage(MSG_FALL_THROUGH_LAST), + "179:11: " + getCheckMessage(MSG_FALL_THROUGH), "369:11: " + getCheckMessage(MSG_FALL_THROUGH), "372:11: " + getCheckMessage(MSG_FALL_THROUGH), "374:40: " + getCheckMessage(MSG_FALL_THROUGH), @@ -94,6 +98,7 @@ public class FallThroughCheckTest extends BaseCheckTestSupport { final String[] expected = { "14:13: " + getCheckMessage(MSG_FALL_THROUGH), "38:13: " + getCheckMessage(MSG_FALL_THROUGH), + "47:13: " + getCheckMessage(MSG_FALL_THROUGH), "53:13: " + getCheckMessage(MSG_FALL_THROUGH), "70:13: " + getCheckMessage(MSG_FALL_THROUGH), "87:13: " + getCheckMessage(MSG_FALL_THROUGH), @@ -101,6 +106,7 @@ public class FallThroughCheckTest extends BaseCheckTestSupport { "123:13: " + getCheckMessage(MSG_FALL_THROUGH), "145:11: " + getCheckMessage(MSG_FALL_THROUGH), "170:11: " + getCheckMessage(MSG_FALL_THROUGH), + "179:11: " + getCheckMessage(MSG_FALL_THROUGH), "186:11: " + getCheckMessage(MSG_FALL_THROUGH), "204:11: " + getCheckMessage(MSG_FALL_THROUGH), "222:11: " + getCheckMessage(MSG_FALL_THROUGH), @@ -138,4 +144,23 @@ public class FallThroughCheckTest extends BaseCheckTestSupport { Assert.assertNotNull(check.getDefaultTokens()); Assert.assertNotNull(check.getRequiredTokens()); } + + @Test + public void testFallThroughNoElse() throws Exception { + DefaultConfiguration checkConfig = createCheckConfig(FallThroughCheck.class); + final String[] expected = { + "20:13: " + getCheckMessage(MSG_FALL_THROUGH), + "35:13: " + getCheckMessage(MSG_FALL_THROUGH), + "39:13: " + getCheckMessage(MSG_FALL_THROUGH), + "46:13: " + getCheckMessage(MSG_FALL_THROUGH), + "60:13: " + getCheckMessage(MSG_FALL_THROUGH), + "67:13: " + getCheckMessage(MSG_FALL_THROUGH), + "80:21: " + getCheckMessage(MSG_FALL_THROUGH), + "86:13: " + getCheckMessage(MSG_FALL_THROUGH), + "88:13: " + getCheckMessage(MSG_FALL_THROUGH), + }; + verify(checkConfig, + getPath("coding" + File.separator + "InputFallThrough2.java"), + expected); + } } diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/coding/InputFallThrough2.java b/src/test/resources/com/puppycrawl/tools/checkstyle/coding/InputFallThrough2.java new file mode 100644 index 000000000..30930aa69 --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/coding/InputFallThrough2.java @@ -0,0 +1,95 @@ +package com.puppycrawl.tools.checkstyle.coding; + +public class InputFallThrough2 { + enum Test { + A, B, C + } + + public static void test() { + Test test = Test.A; + int variable = 0; + + switch (test) { + case A: + break; + case B: + if (variable == 1) { + // some work + break; + } + case C: + break; + } + + int var2 = 1; + switch (variable) { + case 0: + case 1: + case 2: + System.out.println(var2); + break; + case 3: + if (true) { + return; + } + case 4: + if (var2 == 2) { + break; + } + case 5: + if (var2 == 1) { + + } + else if (true) { + return; + } + case 6: + if (var2 > 1) { + break; + } + else { + break; + } + case 7: + if (var2 ==1) { + break; + } + else if (true) { + return; + } + case 8: + if(var2 == 5) { + System.out.println("0xB16B00B5"); + } + else { + break; + } + case 9: + if(var2 == 5) { + System.out.println("0xCAFED00D"); + } + else { + System.out.printf("0x4B1D"); + } + break; + case 10: + int var3 = 0xDEADBEEF; + switch (var3) { + case 0xCAFEBABE: + System.out.printf("0x1CEB00DA"); + default: + System.out.printf(""); + } + if(true) { + break; + } + case 11: + if(false) {break;} + case 12: + if(true); + break; + default: + break; + } + } +}