Package com.puppycrawl.tools.checkstyle
Class TreeWalker
- java.lang.Object
-
- com.puppycrawl.tools.checkstyle.api.AutomaticBean
-
- com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
-
- com.puppycrawl.tools.checkstyle.api.AbstractFileSetCheck
-
- com.puppycrawl.tools.checkstyle.TreeWalker
-
- All Implemented Interfaces:
Configurable
,Contextualizable
,ExternalResourceHolder
,FileSetCheck
public final class TreeWalker extends AbstractFileSetCheck implements ExternalResourceHolder
Responsible for walking an abstract syntax tree and notifying interested checks at each each node.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
TreeWalker.AstState
State of AST.
-
Field Summary
Fields Modifier and Type Field Description private Context
childContext
Context of child components.private java.lang.ClassLoader
classLoader
Class loader to resolve classes with.private java.util.Set<AbstractCheck>
commentChecks
Registered comment checks.private static int
DEFAULT_TAB_WIDTH
Default distance between tab stops.private ModuleFactory
moduleFactory
A factory for creating submodules (i.e.private java.util.Set<AbstractCheck>
ordinaryChecks
Registered ordinary checks, that don't use comment nodes.private int
tabWidth
The distance between tab stops.private com.google.common.collect.Multimap<java.lang.String,AbstractCheck>
tokenToCommentChecks
Maps from token name to comment checks.private com.google.common.collect.Multimap<java.lang.String,AbstractCheck>
tokenToOrdinaryChecks
Maps from token name to ordinary checks.
-
Constructor Summary
Constructors Constructor Description TreeWalker()
Creates a newTreeWalker
instance.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description private static DetailAST
appendHiddenCommentNodes(DetailAST root)
Appends comment nodes to existing AST.private static java.util.Map.Entry<java.lang.Integer,java.lang.Integer>
countLinesColumns(java.lang.String text, int initialLinesCnt, int initialColumnsCnt)
Count lines and columns (in last line) in text.private static DetailAST
createBlockCommentNode(antlr.Token token)
Create block comment from token.private static DetailAST
createCommentAstFromToken(antlr.Token token)
Create comment AST from token.private static DetailAST
createSlCommentNode(antlr.Token token)
Create single-line comment from token.void
destroy()
Cleans up the object.void
finishLocalSetup()
Provides a hook to finish the part of this component's setup that was not handled by the bean introspection.java.util.Set<java.lang.String>
getExternalResourceLocations()
Returns a set of external configuration resource locations which are used by the module.private static java.util.Set<java.lang.String>
getExternalResourceLocations(java.util.Set<AbstractCheck> checks)
Returns a set of external configuration resource locations which are used by the checks set.private java.util.Collection<AbstractCheck>
getListOfChecks(DetailAST ast, TreeWalker.AstState astState)
Method returns list of checks.private static boolean
isPositionGreater(DetailAST ast1, DetailAST ast2)
Checks if position of first DetailAST is greater than position of second DetailAST.private void
notifyBegin(DetailAST rootAST, FileContents contents, TreeWalker.AstState astState)
Notify checks that we are about to begin walking a tree.private void
notifyEnd(DetailAST rootAST, TreeWalker.AstState astState)
Notify checks that we have finished walking a tree.private void
notifyLeave(DetailAST ast, TreeWalker.AstState astState)
Notify checks that leaving a node.private void
notifyVisit(DetailAST ast, TreeWalker.AstState astState)
Notify checks that visiting a node.static DetailAST
parse(FileContents contents)
Static helper method to parses a Java source file.static DetailAST
parseWithComments(FileContents contents)
Parses Java source file.protected void
processFiltered(java.io.File file, java.util.List<java.lang.String> lines)
Called to process a file that matches the specified file extensions.private void
processIter(DetailAST root, TreeWalker.AstState astState)
Processes a node calling interested checks at each node.private void
registerCheck(int tokenId, AbstractCheck check)
Register a check for a specified token id.private void
registerCheck(AbstractCheck check)
Register a check for a given configuration.private void
registerCheck(java.lang.String token, AbstractCheck check)
Register a check for a specified token name.void
setCacheFile(java.lang.String fileName)
Deprecated.UseChecker.setCacheFile(java.lang.String)
instead.void
setClassLoader(java.lang.ClassLoader classLoader)
Sets classLoader to load class.void
setModuleFactory(ModuleFactory moduleFactory)
Sets the module factory for creating child modules (Checks).void
setTabWidth(int tabWidth)
Sets tab width.void
setupChild(Configuration childConf)
Called by configure() for every child of this component's Configuration.private static void
validateDefaultTokens(AbstractCheck check)
Validates that check's required tokens are subset of default tokens.private void
walk(DetailAST ast, FileContents contents, TreeWalker.AstState astState)
Initiates the walk of an AST.-
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractFileSetCheck
beginProcessing, finishProcessing, fireErrors, getFileExtensions, getMessageCollector, getMessageDispatcher, init, log, log, process, setFileExtensions, setMessageDispatcher
-
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, log, setId, setSeverity
-
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AutomaticBean
configure, contextualize, getConfiguration
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.puppycrawl.tools.checkstyle.api.Configurable
configure
-
Methods inherited from interface com.puppycrawl.tools.checkstyle.api.Contextualizable
contextualize
-
-
-
-
Field Detail
-
DEFAULT_TAB_WIDTH
private static final int DEFAULT_TAB_WIDTH
Default distance between tab stops.- See Also:
- Constant Field Values
-
tokenToOrdinaryChecks
private final com.google.common.collect.Multimap<java.lang.String,AbstractCheck> tokenToOrdinaryChecks
Maps from token name to ordinary checks.
-
tokenToCommentChecks
private final com.google.common.collect.Multimap<java.lang.String,AbstractCheck> tokenToCommentChecks
Maps from token name to comment checks.
-
ordinaryChecks
private final java.util.Set<AbstractCheck> ordinaryChecks
Registered ordinary checks, that don't use comment nodes.
-
commentChecks
private final java.util.Set<AbstractCheck> commentChecks
Registered comment checks.
-
tabWidth
private int tabWidth
The distance between tab stops.
-
classLoader
private java.lang.ClassLoader classLoader
Class loader to resolve classes with.
-
childContext
private Context childContext
Context of child components.
-
moduleFactory
private ModuleFactory moduleFactory
A factory for creating submodules (i.e. the Checks)
-
-
Method Detail
-
setTabWidth
public void setTabWidth(int tabWidth)
Sets tab width.- Parameters:
tabWidth
- the distance between tab stops
-
setCacheFile
@Deprecated public void setCacheFile(java.lang.String fileName)
Deprecated.UseChecker.setCacheFile(java.lang.String)
instead. It does not do anything now. We just keep the setter for transition period to the same option in Checker. The method will be completely removed in Checkstyle 8.0. See issue#2883Sets cache file.- Parameters:
fileName
- the cache file
-
setClassLoader
public void setClassLoader(java.lang.ClassLoader classLoader)
Sets classLoader to load class.- Parameters:
classLoader
- class loader to resolve classes with.
-
setModuleFactory
public void setModuleFactory(ModuleFactory moduleFactory)
Sets the module factory for creating child modules (Checks).- Parameters:
moduleFactory
- the factory
-
finishLocalSetup
public void finishLocalSetup()
Description copied from class:AutomaticBean
Provides a hook to finish the part of this component's setup that was not handled by the bean introspection.The default implementation does nothing.
- Overrides:
finishLocalSetup
in classAutomaticBean
-
setupChild
public void setupChild(Configuration childConf) throws CheckstyleException
Description copied from class:AutomaticBean
Called by configure() for every child of this component's Configuration.The default implementation throws
CheckstyleException
ifchildConf
isnull
because it doesn't support children. It must be overridden to validate and support children that are wanted.- Overrides:
setupChild
in classAutomaticBean
- Parameters:
childConf
- a child of this component's Configuration- Throws:
CheckstyleException
- if there is a configuration error.- See Also:
Configuration.getChildren()
-
processFiltered
protected void processFiltered(java.io.File file, java.util.List<java.lang.String> lines) throws CheckstyleException
Description copied from class:AbstractFileSetCheck
Called to process a file that matches the specified file extensions.- Specified by:
processFiltered
in classAbstractFileSetCheck
- Parameters:
file
- the file to be processedlines
- an immutable list of the contents of the file.- Throws:
CheckstyleException
- if error condition within Checkstyle occurs.
-
registerCheck
private void registerCheck(AbstractCheck check) throws CheckstyleException
Register a check for a given configuration.- Parameters:
check
- the check to register- Throws:
CheckstyleException
- if an error occurs
-
registerCheck
private void registerCheck(int tokenId, AbstractCheck check) throws CheckstyleException
Register a check for a specified token id.- Parameters:
tokenId
- the id of the tokencheck
- the check to register- Throws:
CheckstyleException
- if Check is misconfigured
-
registerCheck
private void registerCheck(java.lang.String token, AbstractCheck check) throws CheckstyleException
Register a check for a specified token name.- Parameters:
token
- the name of the tokencheck
- the check to register- Throws:
CheckstyleException
- if Check is misconfigured
-
validateDefaultTokens
private static void validateDefaultTokens(AbstractCheck check) throws CheckstyleException
Validates that check's required tokens are subset of default tokens.- Parameters:
check
- to validate- Throws:
CheckstyleException
- when validation of default tokens fails
-
walk
private void walk(DetailAST ast, FileContents contents, TreeWalker.AstState astState)
Initiates the walk of an AST.- Parameters:
ast
- the root ASTcontents
- the contents of the file the AST was generated from.astState
- state of AST.
-
notifyBegin
private void notifyBegin(DetailAST rootAST, FileContents contents, TreeWalker.AstState astState)
Notify checks that we are about to begin walking a tree.- Parameters:
rootAST
- the root of the tree.contents
- the contents of the file the AST was generated from.astState
- state of AST.
-
notifyEnd
private void notifyEnd(DetailAST rootAST, TreeWalker.AstState astState)
Notify checks that we have finished walking a tree.- Parameters:
rootAST
- the root of the tree.astState
- state of AST.
-
notifyVisit
private void notifyVisit(DetailAST ast, TreeWalker.AstState astState)
Notify checks that visiting a node.- Parameters:
ast
- the node to notify for.astState
- state of AST.
-
notifyLeave
private void notifyLeave(DetailAST ast, TreeWalker.AstState astState)
Notify checks that leaving a node.- Parameters:
ast
- the node to notify forastState
- state of AST.
-
getListOfChecks
private java.util.Collection<AbstractCheck> getListOfChecks(DetailAST ast, TreeWalker.AstState astState)
Method returns list of checks.- Parameters:
ast
- the node to notify forastState
- state of AST.- Returns:
- list of visitors
-
parse
public static DetailAST parse(FileContents contents) throws antlr.RecognitionException, antlr.TokenStreamException
Static helper method to parses a Java source file.- Parameters:
contents
- contains the contents of the file- Returns:
- the root of the AST
- Throws:
antlr.TokenStreamException
- if lexing failedantlr.RecognitionException
- if parsing failed
-
parseWithComments
public static DetailAST parseWithComments(FileContents contents) throws antlr.RecognitionException, antlr.TokenStreamException
Parses Java source file. Result AST contains comment nodes.- Parameters:
contents
- source file content- Returns:
- DetailAST tree
- Throws:
antlr.RecognitionException
- if parser failedantlr.TokenStreamException
- if lexer failed
-
destroy
public void destroy()
Description copied from interface:FileSetCheck
Cleans up the object.- Specified by:
destroy
in interfaceFileSetCheck
- Overrides:
destroy
in classAbstractFileSetCheck
-
getExternalResourceLocations
public java.util.Set<java.lang.String> getExternalResourceLocations()
Description copied from interface:ExternalResourceHolder
Returns a set of external configuration resource locations which are used by the module. ATTENTION! If 'getExternalResourceLocations()' return null, there will beNullPointerException
inChecker
. Such behaviour will signal that your module (check or filter) is designed incorrectly. It make sense to return an empty set from 'getExternalResourceLocations()' only for composite modules likeTreeWalker
.- Specified by:
getExternalResourceLocations
in interfaceExternalResourceHolder
- Returns:
- a set of external configuration resource locations which are used by the module.
-
getExternalResourceLocations
private static java.util.Set<java.lang.String> getExternalResourceLocations(java.util.Set<AbstractCheck> checks)
Returns a set of external configuration resource locations which are used by the checks set.- Parameters:
checks
- a set of checks.- Returns:
- a set of external configuration resource locations which are used by the checks set.
-
processIter
private void processIter(DetailAST root, TreeWalker.AstState astState)
Processes a node calling interested checks at each node. Uses iterative algorithm.- Parameters:
root
- the root of tree for processastState
- state of AST.
-
appendHiddenCommentNodes
private static DetailAST appendHiddenCommentNodes(DetailAST root)
Appends comment nodes to existing AST. It traverses each node in AST, looks for hidden comment tokens and appends found comment tokens as nodes in AST.- Parameters:
root
- root of AST.- Returns:
- root of AST with comment nodes.
-
isPositionGreater
private static boolean isPositionGreater(DetailAST ast1, DetailAST ast2)
Checks if position of first DetailAST is greater than position of second DetailAST. Position is line number and column number in source file.- Parameters:
ast1
- first DetailAST node.ast2
- second DetailAST node.- Returns:
- true if position of ast1 is greater than position of ast2.
-
createCommentAstFromToken
private static DetailAST createCommentAstFromToken(antlr.Token token)
Create comment AST from token. Depending on token type SINGLE_LINE_COMMENT or BLOCK_COMMENT_BEGIN is created.- Parameters:
token
- Token object.- Returns:
- DetailAST of comment node.
-
createSlCommentNode
private static DetailAST createSlCommentNode(antlr.Token token)
Create single-line comment from token.- Parameters:
token
- Token object.- Returns:
- DetailAST with SINGLE_LINE_COMMENT type.
-
createBlockCommentNode
private static DetailAST createBlockCommentNode(antlr.Token token)
Create block comment from token.- Parameters:
token
- Token object.- Returns:
- DetailAST with BLOCK_COMMENT type.
-
countLinesColumns
private static java.util.Map.Entry<java.lang.Integer,java.lang.Integer> countLinesColumns(java.lang.String text, int initialLinesCnt, int initialColumnsCnt)
Count lines and columns (in last line) in text.- Parameters:
text
- String.initialLinesCnt
- initial value of lines counter.initialColumnsCnt
- initial value of columns counter.- Returns:
- entry(pair), first element is lines counter, second - columns counter.
-
-