Fix FallThroughCheck fails on if with no else, issue #1395.

This commit is contained in:
Andrei Selkin 2015-07-18 12:10:35 +03:00 committed by Roman Ivanov
parent 901dce39c1
commit 0d66a67b0d
5 changed files with 128 additions and 3 deletions

View File

@ -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,

View File

@ -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 {

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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;
}
}
}