public class AvoidNestedBlocksCheck extends AbstractCheck
Finds nested blocks (blocks that are used freely in the code).
Rationale: Nested blocks are often leftovers from the debugging process, they confuse the reader.
For example, this check finds the obsolete braces in
public void guessTheOutput()
{
int whichIsWhich = 0;
{
whichIsWhich = 2;
}
System.out.println("value = " + whichIsWhich);
}
and debugging / refactoring leftovers such as
// if (conditionThatIsNotUsedAnyLonger)
{
System.out.println("unconditional");
}
A case in a switch statement does not implicitly form a block. Thus to be able to introduce local variables that have case scope it is necessary to open a nested block. This is supported, set the allowInSwitchCase property to true and include all statements of the case in the block.
allowInSwitchCase - Allow nested blocks if they are the
only child of a switch case.
Type is boolean.
Default value is false.
To configure the check:
<module name="AvoidNestedBlocks"/>
Example:
public void foo() {
int myInteger = 0;
{ // violation
myInteger = 2;
}
System.out.println("myInteger = " + myInteger);
switch (a) {
case 1:
{ // violation
System.out.println("Case 1");
break;
}
case 2:
System.out.println("Case 2"); // OK
break;
}
}
To configure the check to allow nested blocks in switch case:
<module name="AvoidNestedBlocks"> <property name="allowInSwitchCase" value="true"/> </module>
Example:
public void foo() {
int myInteger = 0;
{ // violation
myInteger = 2;
}
System.out.println("myInteger = " + myInteger);
switch (a)
{
case 1:
{ // OK
System.out.println("Case 1");
break;
}
case 2:
System.out.println("Case 2"); // OK
break;
}
}
Parent is com.puppycrawl.tools.checkstyle.TreeWalker
Violation Message Keys:
block.nested
AutomaticBean.OutputStreamOptions| Modifier and Type | Field and Description |
|---|---|
private boolean |
allowInSwitchCase
Allow nested blocks if they are the only child of a switch case.
|
static java.lang.String |
MSG_KEY_BLOCK_NESTED
A key is pointing to the warning message text in "messages.properties"
file.
|
| Constructor and Description |
|---|
AvoidNestedBlocksCheck() |
| 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.
|
private static boolean |
hasSiblings(DetailAST ast)
Checks whether the AST node has any siblings or not.
|
void |
setAllowInSwitchCase(boolean allowInSwitchCase)
Setter to allow nested blocks if they are the only child of a switch case.
|
void |
visitToken(DetailAST ast)
Called to process a token.
|
beginTree, clearViolations, destroy, finishTree, getFileContents, getLine, getLineCodePoints, getLines, getTabWidth, getTokenNames, getViolations, 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_KEY_BLOCK_NESTED
private boolean allowInSwitchCase
public AvoidNestedBlocksCheck()
public int[] getDefaultTokens()
AbstractCheckgetDefaultTokens in class AbstractCheckTokenTypespublic int[] getAcceptableTokens()
AbstractCheckgetAcceptableTokens in class AbstractCheckTokenTypespublic int[] getRequiredTokens()
AbstractCheckgetRequiredTokens in class AbstractCheckTokenTypespublic void visitToken(DetailAST ast)
AbstractCheckvisitToken in class AbstractCheckast - the token to processprivate static boolean hasSiblings(DetailAST ast)
ast - node to examinetrue if the node has one or more siblingspublic void setAllowInSwitchCase(boolean allowInSwitchCase)
allowInSwitchCase - whether nested blocks are allowed
if they are the only child of a switch case.Copyright © 2001-2022. All Rights Reserved.