Since Checkstyle 3.1
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.
name | description | type | default value | since |
---|---|---|---|---|
allowInSwitchCase | Allow nested blocks if they are the only child of a switch case. | boolean | false |
3.2 |
To configure the check:
<module name="Checker"> <module name="TreeWalker"> <module name="AvoidNestedBlocks"/> </module> </module>
Example:
public class Example1 { public void foo() { int myInteger = 0; { // violation 'Avoid nested blocks' myInteger = 2; } System.out.println("myInteger = " + myInteger); switch (a) { case 1: { // violation 'Avoid nested blocks' System.out.println("Case 1"); break; } case 2: System.out.println("Case 2"); break; } } }
To configure the check to allow nested blocks in switch case:
<module name="Checker"> <module name="TreeWalker"> <module name="AvoidNestedBlocks"> <property name="allowInSwitchCase" value="true"/> </module> </module> </module>
Example:
public class Example2 { public void foo() { int myInteger = 0; { // violation 'Avoid nested blocks' myInteger = 2; } System.out.println("myInteger = " + myInteger); switch (a) { case 1: { System.out.println("Case 1"); break; } case 2: System.out.println("Case 2"); break; } } }
All messages can be customized if the default message doesn't suit you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.blocks