Issue #1438: Fix handling finally in FallThroughCheck

This commit is contained in:
Vladislav Lisetskiy 2015-11-09 20:59:57 +03:00 committed by Roman Ivanov
parent 1b5132b7f8
commit 2bd61975df
5 changed files with 17 additions and 17 deletions

View File

@ -50,7 +50,6 @@ public class FallThroughTest extends BaseCheckTestSupport {
"53:13: " + msg,
"70:13: " + msg,
"87:13: " + msg,
"105:13: " + msg,
"123:13: " + msg,
"179:11: " + msg,
"369:11: " + msg,

View File

@ -102,7 +102,7 @@ public class FallThroughInput
} finally {
i++;
}
case 23: //warn
case 23:
switch (j) {
case 1:
continue;

View File

@ -272,20 +272,25 @@ public class FallThroughCheck extends Check {
private boolean checkTry(final DetailAST ast, boolean useBreak,
boolean useContinue) {
final DetailAST finalStmt = ast.getLastChild();
boolean isTerminated = false;
if (finalStmt.getType() == TokenTypes.LITERAL_FINALLY) {
return isTerminated(finalStmt.findFirstToken(TokenTypes.SLIST),
isTerminated = isTerminated(finalStmt.findFirstToken(TokenTypes.SLIST),
useBreak, useContinue);
}
boolean isTerminated = isTerminated(ast.getFirstChild(),
useBreak, useContinue);
if (!isTerminated) {
isTerminated = isTerminated(ast.getFirstChild(),
useBreak, useContinue);
DetailAST catchStmt = ast.findFirstToken(TokenTypes.LITERAL_CATCH);
while (catchStmt != null && isTerminated) {
final DetailAST catchBody =
catchStmt.findFirstToken(TokenTypes.SLIST);
isTerminated &= isTerminated(catchBody, useBreak, useContinue);
catchStmt = catchStmt.getNextSibling();
DetailAST catchStmt = ast.findFirstToken(TokenTypes.LITERAL_CATCH);
while (catchStmt != null
&& isTerminated
&& catchStmt.getType() == TokenTypes.LITERAL_CATCH) {
final DetailAST catchBody =
catchStmt.findFirstToken(TokenTypes.SLIST);
isTerminated = isTerminated(catchBody, useBreak, useContinue);
catchStmt = catchStmt.getNextSibling();
}
}
return isTerminated;
}

View File

@ -48,7 +48,6 @@ public class FallThroughCheckTest extends BaseCheckTestSupport {
"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),
@ -76,7 +75,6 @@ public class FallThroughCheckTest extends BaseCheckTestSupport {
"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),
@ -108,7 +106,6 @@ public class FallThroughCheckTest extends BaseCheckTestSupport {
"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),
"145:11: " + getCheckMessage(MSG_FALL_THROUGH),
"170:11: " + getCheckMessage(MSG_FALL_THROUGH),
@ -116,7 +113,6 @@ public class FallThroughCheckTest extends BaseCheckTestSupport {
"186:11: " + getCheckMessage(MSG_FALL_THROUGH),
"204:11: " + getCheckMessage(MSG_FALL_THROUGH),
"222:11: " + getCheckMessage(MSG_FALL_THROUGH),
"241:11: " + getCheckMessage(MSG_FALL_THROUGH),
"252:26: " + getCheckMessage(MSG_FALL_THROUGH),
"266:11: " + getCheckMessage(MSG_FALL_THROUGH),
"281:11: " + getCheckMessage(MSG_FALL_THROUGH),

View File

@ -102,7 +102,7 @@ public class InputFallThrough
} finally {
i++;
}
case 23: //fall through!!!
case 23:
switch (j) {
case 1:
continue;
@ -237,7 +237,7 @@ public class InputFallThrough
} finally {
i++;
}
/* fallthru */
case 23:
switch (j) {
case 1: