public class FallThroughCheck extends AbstractCheck
Checks for fall-through in switch statements.
Finds locations where a case contains Java code but lacks a
break, return, throw or continue statement.
The check honors special comments to suppress the warning.
By default the texts
"fallthru", "fall thru", "fall-thru",
"fallthrough", "fall through", "fall-through"
"fallsthrough", "falls through", "falls-through" (case sensitive).
The comment containing these words must be all on one line,
and must be on the last non-empty line before the case triggering
the warning or on the same line before the case(ugly, but possible).
Note: The check assumes that there is no unreachable code in the case.
checkLastCaseGroup - Control whether the last case group must be checked.
Type is boolean.
Default value is false.
reliefPattern - Define the RegExp to match the relief comment that suppresses
the warning about a fall through.
Type is java.util.regex.Pattern.
Default value is "falls?[ -]?thr(u|ough)".
To configure the check:
<module name="FallThrough"/>
Example:
public void foo() throws Exception {
int i = 0;
while (i >= 0) {
switch (i) {
case 1:
i++;
case 2: // violation, previous case contains code but lacks
// break, return, throw or continue statement
i++;
break;
case 3: // OK
i++;
return;
case 4: // OK
i++;
throw new Exception();
case 5: // OK
i++;
continue;
case 6: // OK
case 7: // Previous case: OK, case does not contain code
// This case: OK, by default the last case might not have statement
// that transfer control
i++;
}
}
}
Example how to suppress violations by comment:
switch (i) {
case 1:
i++; // fall through
case 2: // OK
i++;
// fallthru
case 3: { // OK
i++;
}
/* fall-thru */
case 4: // OK
i++;
// Fallthru
case 5: // violation, "Fallthru" in case 4 should be "fallthru"
i++;
// fall through
i++;
case 6: // violation, the comment must be on the last non-empty line before 'case'
i++;
/* fall through */case 7: // OK, comment can appear on the same line but before 'case'
i++;
}
To configure the check to enable check for last case group:
<module name="FallThrough">
<property name="checkLastCaseGroup" value="true"/>
</module>
Example:
switch (i) {
case 1:
break;
case 2: // Previous case: OK
// This case: violation, last case must have statement that transfer control
i++;
}
To configure the check with custom relief pattern:
<module name="FallThrough">
<property name="reliefPattern" value="FALL?[ -]?THROUGH"/>
</module>
Example:
switch (i) {
case 1:
i++;
// FALL-THROUGH
case 2: // OK, "FALL-THROUGH" matches the regular expression "FALL?[ -]?THROUGH"
i++;
// fall-through
case 3: // violation, "fall-through" doesn't match
break;
}
Parent is com.puppycrawl.tools.checkstyle.TreeWalker
Violation Message Keys:
fall.through
fall.through.last
AutomaticBean.OutputStreamOptions| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
MSG_FALL_THROUGH
A key is pointing to the warning message text in "messages.properties"
file.
|
static java.lang.String |
MSG_FALL_THROUGH_LAST
A key is pointing to the warning message text in "messages.properties"
file.
|
| Constructor and Description |
|---|
FallThroughCheck() |
| Modifier and Type | Method and Description |
|---|---|
int[] |
getAcceptableTokens()
The configurable token set.
|
int[] |
getDefaultTokens()
Returns the default token a check is interested in.
|
int[] |
getRequiredTokens()
The tokens that this check must be registered for.
|
void |
setCheckLastCaseGroup(boolean value)
Setter to control whether the last case group must be checked.
|
void |
setReliefPattern(java.util.regex.Pattern pattern)
Setter to define the RegExp to match the relief comment that suppresses
the warning about a fall through.
|
void |
visitToken(DetailAST ast)
Called to process a token.
|
beginTree, clearMessages, destroy, finishTree, getFileContents, getLine, getLines, getMessages, getTabWidth, getTokenNames, init, isCommentNodesRequired, leaveToken, log, log, log, setFileContents, setTabWidth, setTokensfinishLocalSetup, getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, setId, setSeverityconfigure, contextualize, getConfiguration, setupChildpublic static final java.lang.String MSG_FALL_THROUGH
public static final java.lang.String MSG_FALL_THROUGH_LAST
public FallThroughCheck()
public int[] getDefaultTokens()
AbstractCheckgetDefaultTokens in class AbstractCheckTokenTypespublic int[] getRequiredTokens()
AbstractCheckgetRequiredTokens in class AbstractCheckTokenTypespublic int[] getAcceptableTokens()
AbstractCheckgetAcceptableTokens in class AbstractCheckTokenTypespublic void setReliefPattern(java.util.regex.Pattern pattern)
pattern - The regular expression pattern.public void setCheckLastCaseGroup(boolean value)
value - new value of the property.public void visitToken(DetailAST ast)
AbstractCheckvisitToken in class AbstractCheckast - the token to processCopyright © 2001-2020. All Rights Reserved.