com.puppycrawl.tools.checkstyle.checks.blocks

Class AvoidNestedBlocksCheck

Implemented Interfaces:
Configurable, Contextualizable

public class AvoidNestedBlocksCheck
extends Check

Finds nested blocks.

For example this Check flags confusing code like

 public void guessTheOutput()
 {
     int whichIsWich = 0;
     {
         int whichIsWhich = 2;
     }
     System.out.println("value = " + whichIsWhich);
 }
 
and debugging / refactoring leftovers such as
 // if (someOldCondition)
 {
     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.

 switch (a)
 {
     case 0:
         // Never OK, break outside block
         {
             x = 1;
         }
         break;
     case 1:
         // Never OK, statement outside block
         System.out.println("Hello");
         {
             x = 2;
             break;
         }
     case 1:
         // OK if allowInSwitchCase is true
         {
             System.out.println("Hello");
             x = 2;
             break;
         }
 }
 

Author:
lkuehne

Method Summary

int[]
getDefaultTokens()
void
setAllowInSwitchCase(boolean aAllowInSwitchCase)
Setter for allowInSwitchCase property.
void
visitToken(DetailAST aAST)

Methods inherited from class com.puppycrawl.tools.checkstyle.api.Check

beginTree, destroy, finishTree, getAcceptableTokens, getClassLoader, getDefaultTokens, getFileContents, getLines, getRequiredTokens, getTabWidth, getTokenNames, init, leaveToken, log, log, setClassLoader, setFileContents, setMessages, setTabWidth, setTokens, visitToken

Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter

getMessageBundle, getSeverity, getSeverityLevel, log, log, log, log, log, log, log, log, log, log, log, setSeverity

Methods inherited from class com.puppycrawl.tools.checkstyle.api.AutomaticBean

configure, contextualize, finishLocalSetup, getConfiguration, setupChild

Method Details

getDefaultTokens

public int[] getDefaultTokens()
Overrides:
getDefaultTokens in interface Check

See Also:
Check


setAllowInSwitchCase

public void setAllowInSwitchCase(boolean aAllowInSwitchCase)
Setter for allowInSwitchCase property.

Parameters:
aAllowInSwitchCase - whether nested blocks are allowed if they are the only child of a switch case.


visitToken

public void visitToken(DetailAST aAST)
Overrides:
visitToken in interface Check

See Also:
Check