com.puppycrawl.tools.checkstyle.checks.indentation

Class IndentationCheck

Implemented Interfaces:
Configurable, Contextualizable

public class IndentationCheck
extends Check

Checks correct indentation of Java Code.

The basic idea behind this is that while pretty printers are sometimes convienent for bulk reformats of legacy code, they often either aren't configurable enough or just can't anticipate how format should be done. Sometimes this is personal preference, other times it is practical experience. In any case, this check should just ensure that a minimal set of indentation rules are followed.

Implementation -- Basically, this check requests visitation for all handled token types (those tokens registered in the HandlerFactory). When visitToken is called, a new ExpressionHandler is created for the AST and pushed onto the mHandlers stack. The new handler then checks the indentation for the currently visiting AST. When leaveToken is called, the ExpressionHandler is popped from the stack.

While on the stack the ExpressionHandler can be queried for the indentation level it suggests for children as well as for other values.

While an ExpressionHandler checks the indentation level of its own AST, it typically also checks surrounding ASTs. For instance, a while loop handler checks the while loop as well as the braces and immediate children.

   - handler class -to-> ID mapping kept in Map
   - parent passed in during construction
   - suggest child indent level
   - allows for some tokens to be on same line (ie inner classes OBJBLOCK)
     and not increase indentation level
   - looked at using double dispatch for suggestedChildLevel(), but it
     doesn't seem worthwhile, at least now
   - both tabs and spaces are considered whitespace in front of the line...
     tabs are converted to spaces
   - block parents with parens -- for, while, if, etc... -- are checked that
     they match the level of the parent
 

Authors:
jrichard
o_sukhodolsky

Constructor Summary

IndentationCheck()
Creates a new instance of IndentationCheck.

Method Summary

void
beginTree(DetailAST aAst)
int
getBasicOffset()
Get the basic offset.
int
getBraceAdjustement()
Get the brace adjustment amount.
int
getCaseIndent()
Get the case indentation level.
int[]
getDefaultTokens()
Get the tokens that this check will handle.
int
getIndentationTabWidth()
Get the width of a tab.
void
indentationLog(int aLine, String aKey, Object[] aArgs)
Log an error message.
void
leaveToken(DetailAST aAST)
void
setBasicOffset(int aBasicOffset)
Set the basic offset.
void
setBraceAdjustment(int aAdjustmentAmount)
Adjusts brace indentation (positive offset).
void
setCaseIndent(int aAmount)
Set the case indentation level.
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

Constructor Details

IndentationCheck

public IndentationCheck()
Creates a new instance of IndentationCheck.

Method Details

beginTree

public void beginTree(DetailAST aAst)
Overrides:
beginTree in interface Check

See Also:
Check


getBasicOffset

public int getBasicOffset()
Get the basic offset.

Returns:
the number of tabs or spaces to indent


getBraceAdjustement

public int getBraceAdjustement()
Get the brace adjustment amount.

Returns:
the positive offset to adjust braces


getCaseIndent

public int getCaseIndent()
Get the case indentation level.

Returns:
the case indentation level


getDefaultTokens

public int[] getDefaultTokens()
Get the tokens that this check will handle.
Overrides:
getDefaultTokens in interface Check

Returns:
the array of tokens that this check handles


getIndentationTabWidth

public int getIndentationTabWidth()
Get the width of a tab.

Returns:
the width of a tab


indentationLog

public void indentationLog(int aLine,
                           String aKey,
                           Object[] aArgs)
Log an error message.

Parameters:
aLine - the line number where the error was found
aKey - the message that describes the error
aArgs - the details of the message

See Also:
java.text.MessageFormat


leaveToken

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

See Also:
Check


setBasicOffset

public void setBasicOffset(int aBasicOffset)
Set the basic offset.

Parameters:
aBasicOffset - the number of tabs or spaces to indent


setBraceAdjustment

public void setBraceAdjustment(int aAdjustmentAmount)
Adjusts brace indentation (positive offset).

Parameters:
aAdjustmentAmount - the brace offset


setCaseIndent

public void setCaseIndent(int aAmount)
Set the case indentation level.

Parameters:
aAmount - the case indentation level


visitToken

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

See Also:
Check