Class 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 is java.lang.String[]. Validation type is tokenTypesSet. Default value is "".
  • Property maximumDepth - Specify the maximum depth for descendant counts. Type is int. Default value is 2147483647.
  • Property maximumMessage - Define the violation message when the maximum count is exceeded. Type is java.lang.String. Default value is null.
  • Property maximumNumber - Specify a maximum count for descendants. Type is int. Default value is 2147483647.
  • Property minimumDepth - Specify the minimum depth for descendant counts. Type is int. Default value is 0.
  • Property minimumMessage - Define the violation message when the minimum count is not reached. Type is java.lang.String. Default value is null.
  • Property minimumNumber - Specify a minimum count for descendants. Type is int. Default value is 0.
  • Property sumTokenCounts - Control whether the number of tokens found should be calculated from the sum of the individual token counts. Type is boolean. Default value is false.
  • Property tokens - tokens to check Type is anyTokenTypesSet. Default value is "".

Parent is com.puppycrawl.tools.checkstyle.TreeWalker

Violation Message Keys:

  • descendant.token.max
  • descendant.token.min
  • descendant.token.sum.max
  • descendant.token.sum.min
Since:
3.2
  • Field Details

    • MSG_KEY_MIN

      public static final String MSG_KEY_MIN
      A key is pointing to the warning message text in "messages.properties" file.
      See Also:
    • MSG_KEY_MAX

      public static final String MSG_KEY_MAX
      A key is pointing to the warning message text in "messages.properties" file.
      See Also:
    • MSG_KEY_SUM_MIN

      public static final String MSG_KEY_SUM_MIN
      A key is pointing to the warning message text in "messages.properties" file.
      See Also:
    • MSG_KEY_SUM_MAX

      public static final String MSG_KEY_SUM_MAX
      A key is pointing to the warning message text in "messages.properties" file.
      See Also:
    • minimumDepth

      private int minimumDepth
      Specify the minimum depth for descendant counts.
    • maximumDepth

      private int maximumDepth
      Specify the maximum depth for descendant counts.
    • minimumNumber

      private int minimumNumber
      Specify a minimum count for descendants.
    • maximumNumber

      private int maximumNumber
      Specify a maximum count for descendants.
    • sumTokenCounts

      private boolean sumTokenCounts
      Control whether the number of tokens found should be calculated from the sum of the individual token counts.
    • limitedTokens

      private int[] limitedTokens
      Specify set of tokens with limited occurrences as descendants.
    • minimumMessage

      Define the violation message when the minimum count is not reached.
    • maximumMessage

      Define the violation message when the maximum count is exceeded.
    • counts

      private int[] counts
      Counts of descendant tokens. Indexed by (token ID - 1) for performance.
  • Constructor Details

  • Method Details

    • getAcceptableTokens

      public int[] getAcceptableTokens()
      Description copied from class: AbstractCheck
      The 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:
      getAcceptableTokens in class AbstractCheck
      Returns:
      the token set this check is designed for.
      See Also:
    • getDefaultTokens

      public int[] getDefaultTokens()
      Description copied from class: AbstractCheck
      Returns the default token a check is interested in. Only used if the configuration for a check does not define the tokens.
      Specified by:
      getDefaultTokens in class AbstractCheck
      Returns:
      the default tokens
      See Also:
    • getRequiredTokens

      public int[] getRequiredTokens()
      Description copied from class: AbstractCheck
      The tokens that this check must be registered for.
      Specified by:
      getRequiredTokens in class AbstractCheck
      Returns:
      the token set this must be registered for.
      See Also:
    • visitToken

      public void visitToken(DetailAST ast)
      Description copied from class: AbstractCheck
      Called to process a token.
      Overrides:
      visitToken in class AbstractCheck
      Parameters:
      ast - the token to process
    • logAsSeparated

      private void logAsSeparated(DetailAST ast)
      Log violations for each Token.
      Parameters:
      ast - token
    • logAsTotal

      private void logAsTotal(DetailAST ast)
      Log validation as one violation.
      Parameters:
      ast - current token
    • countTokens

      private void countTokens(DetailAST ast, int depth)
      Counts the number of occurrences of descendant tokens.
      Parameters:
      ast - the root token for descendants.
      depth - the maximum depth of the counted descendants.
    • setLimitedTokens

      public void setLimitedTokens(String... limitedTokensParam)
      Setter to specify set of tokens with limited occurrences as descendants.
      Parameters:
      limitedTokensParam - tokens to ignore.
      Since:
      3.2
    • setMinimumDepth

      public void setMinimumDepth(int minimumDepth)
      Setter to specify the minimum depth for descendant counts.
      Parameters:
      minimumDepth - the minimum depth for descendant counts.
      Since:
      3.2
    • setMaximumDepth

      public void setMaximumDepth(int maximumDepth)
      Setter to specify the maximum depth for descendant counts.
      Parameters:
      maximumDepth - the maximum depth for descendant counts.
      Since:
      3.2
    • setMinimumNumber

      public void setMinimumNumber(int minimumNumber)
      Setter to specify a minimum count for descendants.
      Parameters:
      minimumNumber - the minimum count for descendants.
      Since:
      3.2
    • setMaximumNumber

      public void setMaximumNumber(int maximumNumber)
      Setter to specify a maximum count for descendants.
      Parameters:
      maximumNumber - the maximum count for descendants.
      Since:
      3.2
    • setMinimumMessage

      public void setMinimumMessage(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 MessageFormat pattern with arguments
      • {0} - token count
      • {1} - minimum number
      • {2} - name of token
      • {3} - name of limited token
      Since:
      3.2
    • setMaximumMessage

      public void setMaximumMessage(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 MessageFormat pattern with arguments
      • {0} - token count
      • {1} - maximum number
      • {2} - name of token
      • {3} - name of limited token
      Since:
      3.2
    • setSumTokenCounts

      public 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.
      Since:
      5.0