## com.puppycrawl.tools.checkstyle.checks.indentation
Class IndentationCheck

    java.lang.Object
      com.puppycrawl.tools.checkstyle.api.AutomaticBean
          com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
              com.puppycrawl.tools.checkstyle.api.Check
                  com.puppycrawl.tools.checkstyle.checks.indentation.IndentationCheck

All 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

Author:
  jrichard, o_sukhodolsky

Constructor Summary
`IndentationCheck()` Creates a new instance of IndentationCheck.

Method Summary
`void` `beginTree(DetailAST aAst)` Called before the starting to process a tree.
`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)` Called after all the child nodes have been process.
`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)` Called to process a token.

Methods inherited from class com.puppycrawl.tools.checkstyle.api.Check
`destroy, finishTree, getAcceptableTokens, getClassLoader, getFileContents, getLines, getRequiredTokens, getTabWidth, getTokenNames, init, log, log, setClassLoader, setFileContents, setMessages, setTabWidth, setTokens`

Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
`getId, getMessageBundle, getSeverity, getSeverityLevel, log, log, log, log, log, log, log, log, log, setId, setSeverity`

Methods inherited from class com.puppycrawl.tools.checkstyle.api.AutomaticBean
`configure, contextualize, finishLocalSetup, getConfiguration, setupChild`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### IndentationCheck

    public IndentationCheck()

  Creates a new instance of IndentationCheck.

Method Detail

### setBasicOffset

    public void setBasicOffset(int aBasicOffset)

  Set the basic offset.

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

### getBasicOffset

    public int getBasicOffset()

  Get the basic offset.

  Returns:
    the number of tabs or spaces to indent

### setBraceAdjustment

    public void setBraceAdjustment(int aAdjustmentAmount)

  Adjusts brace indentation (positive offset).

  Parameters:
    `aAdjustmentAmount` - the brace offset

### getBraceAdjustement

    public int getBraceAdjustement()

  Get the brace adjustment amount.

  Returns:
    the positive offset to adjust braces

### setCaseIndent

    public void setCaseIndent(int aAmount)

  Set the case indentation level.

  Parameters:
    `aAmount` - the case indentation level

### getCaseIndent

    public int getCaseIndent()

  Get the case indentation level.

  Returns:
    the case indentation level

### 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:
    `MessageFormat`

### getIndentationTabWidth

    public int getIndentationTabWidth()

  Get the width of a tab.

  Returns:
    the width of a tab

### getDefaultTokens

    public int[] getDefaultTokens()

  Get the tokens that this check will handle.

  Specified by:
    `getDefaultTokens` in class `Check`
  Returns:
    the array of tokens that this check handles
  See Also:
    `TokenTypes`

### beginTree

    public void beginTree(DetailAST aAst)

  Called before the starting to process a tree. Ideal place to initialise information that is to be collected whilst processing a tree.

  Overrides:
    `beginTree` in class `Check`
  Parameters:
    `aAst` - the root of the tree

### visitToken

    public void visitToken(DetailAST aAST)

  Called to process a token.

  Overrides:
    `visitToken` in class `Check`
  Parameters:
    `aAST` - the token to process

### leaveToken

    public void leaveToken(DetailAST aAST)

  Called after all the child nodes have been process.

  Overrides:
    `leaveToken` in class `Check`
  Parameters:
    `aAST` - the token leaving

Back to the Checkstyle Home Page