Class DescendantTokenCheck
- java.lang.Object
- 
- com.puppycrawl.tools.checkstyle.api.AutomaticBean
- 
- com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
- 
- com.puppycrawl.tools.checkstyle.api.AbstractCheck
- 
- com.puppycrawl.tools.checkstyle.checks.DescendantTokenCheck
 
 
 
 
- 
- All Implemented Interfaces:
- Configurable,- Contextualizable
 
 public class DescendantTokenCheck extends AbstractCheck Checks for restricted tokens beneath other tokens. WARNING: This is a very powerful and flexible check, but, at the same time, it is low-level and very implementation-dependent because its results depend on the grammar we use to build abstract syntax trees. Thus we recommend using other checks when they provide the desired functionality. Essentially, this check just works on the level of an abstract syntax tree and knows nothing about language structures. - 
 Property limitedTokens- Specify set of tokens with limited occurrences as descendants. Type isjava.lang.String[]. Validation type istokenTypesSet. Default value is"".
- 
 Property minimumDepth- Specify the minimum depth for descendant counts. Type isint. Default value is0.
- 
 Property maximumDepth- Specify the maximum depth for descendant counts. Type isint. Default value is2147483647.
- 
 Property minimumNumber- Specify a minimum count for descendants. Type isint. Default value is0.
- 
 Property maximumNumber- Specify a maximum count for descendants. Type isint. Default value is2147483647.
- 
 Property sumTokenCounts- Control whether the number of tokens found should be calculated from the sum of the individual token counts. Type isboolean. Default value isfalse.
- 
 Property minimumMessage- Define the violation message when the minimum count is not reached. Type isjava.lang.String. Default value isnull.
- 
 Property maximumMessage- Define the violation message when the maximum count is exceeded. Type isjava.lang.String. Default value isnull.
- 
 Property tokens- tokens to check Type isanyTokenTypesSet. Default value isempty.
 To configure the check to produce a violation on a switch statement with no default case: <module name="DescendantToken"> <property name="tokens" value="LITERAL_SWITCH"/> <property name="maximumDepth" value="2"/> <property name="limitedTokens" value="LITERAL_DEFAULT"/> <property name="minimumNumber" value="1"/> </module> To configure the check to produce a violation on a condition in forwhich performs no check:<module name="DescendantToken"> <property name="tokens" value="FOR_CONDITION"/> <property name="limitedTokens" value="EXPR"/> <property name="minimumNumber" value="1"/> </module> To configure the check to produce a violation on comparing thiswithnull(i.e.this == nullandthis != null):<module name="DescendantToken"> <property name="tokens" value="EQUAL,NOT_EQUAL"/> <property name="limitedTokens" value="LITERAL_THIS,LITERAL_NULL"/> <property name="maximumNumber" value="1"/> <property name="maximumDepth" value="1"/> <property name="sumTokenCounts" value="true"/> </module> To configure the check to produce a violation on a Stringliteral equality check:<module name="DescendantToken"> <property name="tokens" value="EQUAL,NOT_EQUAL"/> <property name="limitedTokens" value="STRING_LITERAL"/> <property name="maximumNumber" value="0"/> <property name="maximumDepth" value="1"/> </module> To configure the check to produce a violation on an assert statement that may have side effects (formatted for browser display): <module name="DescendantToken"> <property name="tokens" value="LITERAL_ASSERT"/> <property name="limitedTokens" value="ASSIGN,DEC,INC,POST_DEC, POST_INC,PLUS_ASSIGN,MINUS_ASSIGN,STAR_ASSIGN,DIV_ASSIGN,MOD_ASSIGN, BSR_ASSIGN,SR_ASSIGN,SL_ASSIGN,BAND_ASSIGN,BXOR_ASSIGN,BOR_ASSIGN, METHOD_CALL"/> <property name="maximumNumber" value="0"/> </module>To configure the check to produce a violation on an initializer in forperforms no setup (where awhilestatement could be used instead):<module name="DescendantToken"> <property name="tokens" value="FOR_INIT"/> <property name="limitedTokens" value="EXPR"/> <property name="minimumNumber" value="1"/> </module> To configure the check to produce a violation on a switch that is nested in another switch: <module name="DescendantToken"> <property name="tokens" value="LITERAL_SWITCH"/> <property name="limitedTokens" value="LITERAL_SWITCH"/> <property name="maximumNumber" value="0"/> <property name="minimumDepth" value="1"/> </module> To configure the check to produce a violation on a return statement from within a catch or finally block: <module name="DescendantToken"> <property name="tokens" value="LITERAL_FINALLY,LITERAL_CATCH"/> <property name="limitedTokens" value="LITERAL_RETURN"/> <property name="maximumNumber" value="0"/> </module> To configure the check to produce a violation on a try statement within a catch or finally block: <module name="DescendantToken"> <property name="tokens" value="LITERAL_CATCH,LITERAL_FINALLY"/> <property name="limitedTokens" value="LITERAL_TRY"/> <property name="maximumNumber" value="0"/> </module> To configure the check to produce a violation on a switch with too many cases: <module name="DescendantToken"> <property name="tokens" value="LITERAL_SWITCH"/> <property name="limitedTokens" value="LITERAL_CASE"/> <property name="maximumDepth" value="2"/> <property name="maximumNumber" value="10"/> </module> To configure the check to produce a violation on a method with too many local variables: <module name="DescendantToken"> <property name="tokens" value="METHOD_DEF"/> <property name="limitedTokens" value="VARIABLE_DEF"/> <property name="maximumDepth" value="2"/> <property name="maximumNumber" value="10"/> </module> To configure the check to produce a violation on a method with too many returns: <module name="DescendantToken"> <property name="tokens" value="METHOD_DEF"/> <property name="limitedTokens" value="LITERAL_RETURN"/> <property name="maximumNumber" value="3"/> </module> To configure the check to produce a violation on an interface with too many fields: <module name="DescendantToken"> <property name="tokens" value="INTERFACE_DEF"/> <property name="limitedTokens" value="VARIABLE_DEF"/> <property name="maximumDepth" value="2"/> <property name="maximumNumber" value="0"/> </module> To configure the check to produce a violation on a method which throws too many exceptions: <module name="DescendantToken"> <property name="tokens" value="LITERAL_THROWS"/> <property name="limitedTokens" value="IDENT"/> <property name="maximumNumber" value="1"/> </module> To configure the check to produce a violation on a method with too many expressions: <module name="DescendantToken"> <property name="tokens" value="METHOD_DEF"/> <property name="limitedTokens" value="EXPR"/> <property name="maximumNumber" value="200"/> </module> To configure the check to produce a violation on an empty statement: <module name="DescendantToken"> <property name="tokens" value="EMPTY_STAT"/> <property name="limitedTokens" value="EMPTY_STAT"/> <property name="maximumNumber" value="0"/> <property name="maximumDepth" value="0"/> <property name="maximumMessage" value="Empty statement is not allowed."/> </module>To configure the check to produce a violation on a class with too many fields: <module name="DescendantToken"> <property name="tokens" value="CLASS_DEF"/> <property name="limitedTokens" value="VARIABLE_DEF"/> <property name="maximumDepth" value="2"/> <property name="maximumNumber" value="10"/> </module> Parent is com.puppycrawl.tools.checkstyle.TreeWalkerViolation Message Keys: - 
 descendant.token.max
- 
 descendant.token.min
- 
 descendant.token.sum.max
- 
 descendant.token.sum.min
 - Since:
- 3.2
 
- 
- 
Nested Class Summary- 
Nested classes/interfaces inherited from class com.puppycrawl.tools.checkstyle.api.AutomaticBeanAutomaticBean.OutputStreamOptions
 
- 
 - 
Field SummaryFields Modifier and Type Field Description static java.lang.StringMSG_KEY_MAXA key is pointing to the warning message text in "messages.properties" file.static java.lang.StringMSG_KEY_MINA key is pointing to the warning message text in "messages.properties" file.static java.lang.StringMSG_KEY_SUM_MAXA key is pointing to the warning message text in "messages.properties" file.static java.lang.StringMSG_KEY_SUM_MINA key is pointing to the warning message text in "messages.properties" file.
 - 
Constructor SummaryConstructors Constructor Description DescendantTokenCheck()
 - 
Method SummaryAll Methods Instance Methods Concrete Methods Modifier and Type Method Description int[]getAcceptableTokens()The configurable token set.int[]getDefaultTokens()Returns the default token a check is interested in.int[]getRequiredTokens()The tokens that this check must be registered for.voidsetLimitedTokens(java.lang.String... limitedTokensParam)Setter to specify set of tokens with limited occurrences as descendants.voidsetMaximumDepth(int maximumDepth)Setter to specify the maximum depth for descendant counts.voidsetMaximumMessage(java.lang.String message)Setter to define the violation message when the maximum count is exceeded.voidsetMaximumNumber(int maximumNumber)Setter to specify a maximum count for descendants.voidsetMinimumDepth(int minimumDepth)Setter to specify the minimum depth for descendant counts.voidsetMinimumMessage(java.lang.String message)Setter to define the violation message when the minimum count is not reached.voidsetMinimumNumber(int minimumNumber)Setter to specify a minimum count for descendants.voidsetSumTokenCounts(boolean sum)Setter to control whether the number of tokens found should be calculated from the sum of the individual token counts.voidvisitToken(DetailAST ast)Called to process a token.- 
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractCheckbeginTree, clearMessages, destroy, finishTree, getFileContents, getLine, getLines, getMessages, getTabWidth, getTokenNames, init, isCommentNodesRequired, leaveToken, log, log, log, setFileContents, setTabWidth, setTokens
 - 
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractViolationReporterfinishLocalSetup, getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, setId, setSeverity
 - 
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AutomaticBeanconfigure, contextualize, getConfiguration, setupChild
 
- 
 
- 
- 
- 
Field Detail- 
MSG_KEY_MINpublic static final java.lang.String MSG_KEY_MIN A key is pointing to the warning message text in "messages.properties" file.- See Also:
- Constant Field Values
 
 - 
MSG_KEY_MAXpublic static final java.lang.String MSG_KEY_MAX A key is pointing to the warning message text in "messages.properties" file.- See Also:
- Constant Field Values
 
 - 
MSG_KEY_SUM_MINpublic static final java.lang.String MSG_KEY_SUM_MIN A key is pointing to the warning message text in "messages.properties" file.- See Also:
- Constant Field Values
 
 - 
MSG_KEY_SUM_MAXpublic static final java.lang.String MSG_KEY_SUM_MAX A key is pointing to the warning message text in "messages.properties" file.- See Also:
- Constant Field Values
 
 
- 
 - 
Method Detail- 
getAcceptableTokenspublic int[] getAcceptableTokens() Description copied from class:AbstractCheckThe configurable token set. Used to protect Checks against malicious users who specify an unacceptable token set in the configuration file. The default implementation returns the check's default tokens.- Specified by:
- getAcceptableTokensin class- AbstractCheck
- Returns:
- the token set this check is designed for.
- See Also:
- TokenTypes
 
 - 
getDefaultTokenspublic int[] getDefaultTokens() Description copied from class:AbstractCheckReturns the default token a check is interested in. Only used if the configuration for a check does not define the tokens.- Specified by:
- getDefaultTokensin class- AbstractCheck
- Returns:
- the default tokens
- See Also:
- TokenTypes
 
 - 
getRequiredTokenspublic int[] getRequiredTokens() Description copied from class:AbstractCheckThe tokens that this check must be registered for.- Specified by:
- getRequiredTokensin class- AbstractCheck
- Returns:
- the token set this must be registered for.
- See Also:
- TokenTypes
 
 - 
visitTokenpublic void visitToken(DetailAST ast) Description copied from class:AbstractCheckCalled to process a token.- Overrides:
- visitTokenin class- AbstractCheck
- Parameters:
- ast- the token to process
 
 - 
setLimitedTokenspublic void setLimitedTokens(java.lang.String... limitedTokensParam) Setter to specify set of tokens with limited occurrences as descendants.- Parameters:
- limitedTokensParam- - list of tokens to ignore.
 
 - 
setMinimumDepthpublic void setMinimumDepth(int minimumDepth) Setter to specify the minimum depth for descendant counts.- Parameters:
- minimumDepth- the minimum depth for descendant counts.
 
 - 
setMaximumDepthpublic void setMaximumDepth(int maximumDepth) Setter to specify the maximum depth for descendant counts.- Parameters:
- maximumDepth- the maximum depth for descendant counts.
 
 - 
setMinimumNumberpublic void setMinimumNumber(int minimumNumber) Setter to specify a minimum count for descendants.- Parameters:
- minimumNumber- the minimum count for descendants.
 
 - 
setMaximumNumberpublic void setMaximumNumber(int maximumNumber) Setter to specify a maximum count for descendants.- Parameters:
- maximumNumber- the maximum count for descendants.
 
 - 
setMinimumMessagepublic void setMinimumMessage(java.lang.String message) Setter to define the violation message when the minimum count is not reached.- Parameters:
- message- the violation message for minimum count not reached. Used as a- MessageFormatpattern with arguments- {0} - token count
- {1} - minimum number
- {2} - name of token
- {3} - name of limited token
 
 
 - 
setMaximumMessagepublic void setMaximumMessage(java.lang.String message) Setter to define the violation message when the maximum count is exceeded.- Parameters:
- message- the violation message for maximum count exceeded. Used as a- MessageFormatpattern with arguments- {0} - token count
- {1} - maximum number
- {2} - name of token
- {3} - name of limited token
 
 
 - 
setSumTokenCountspublic void setSumTokenCounts(boolean sum) Setter to control whether the number of tokens found should be calculated from the sum of the individual token counts.- Parameters:
- sum- whether to use the sum.
 
 
- 
 
-