Class GoogleMethodNameCheck

All Implemented Interfaces:
Configurable, Contextualizable

Checks that method names conform to the Google Java Style Guide for method naming.

Regular method names must:

  • Be at least 2 characters long.
  • Start with a lowercase letter.
  • Not have a single lowercase letter followed by uppercase.
  • Not have a consecutive uppercase.
  • Contain only letters and digits and underscores.

Test method names must:

  • Be at least 2 characters long per segment.
  • Start each segment with a lowercase letter.
  • Not have a single lowercase letter followed by uppercase in any segment.
  • Not have a consecutive uppercase.
  • Allow underscores to separate segment and digits.
  • Not have leading, trailing, or consecutive underscores.

Notes: Methods annotated with @Override are ignored, as they must match the name defined in the parent class or interface.

Since:
13.10.0
  • Field Details

    • MSG_KEY_FORMAT_REGULAR

      public static final String MSG_KEY_FORMAT_REGULAR
      A key is pointing to the violation message text in "messages.properties" file.
      See Also:
    • MSG_KEY_FORMAT_TEST

      public static final String MSG_KEY_FORMAT_TEST
      A key is pointing to the violation message text in "messages.properties" file.
      See Also:
    • MSG_KEY_UNDERSCORE_REGULAR

      public static final String MSG_KEY_UNDERSCORE_REGULAR
      A key is pointing to the violation message text in "messages.properties" file.
      See Also:
    • MSG_KEY_UNDERSCORE_TEST

      public static final String MSG_KEY_UNDERSCORE_TEST
      A key is pointing to the violation message text in "messages.properties" file.
      See Also:
    • REGULAR_METHOD_NAME_PATTERN

      private static final Pattern REGULAR_METHOD_NAME_PATTERN
      Pattern for valid regular method names in Google style.

      Explanation:

      • ^ - Start of string
      • [a-z] - Must start with a single lowercase letter
      • [a-z0-9]++ - One or more lowercase letters or digits possessively (ensures the initial lowercase block is at least 2 characters long)
      • (?:[A-Z][a-z0-9]++)*+ - Zero or more camelCase humps possessively, where each uppercase letter must be followed by one or more lowercase letters or digits
      • [A-Z]? - An optional single uppercase letter allowed at the very end
      • $ - End of string
    • TEST_METHOD_NAME_PATTERN

      private static final Pattern TEST_METHOD_NAME_PATTERN
      Pattern for valid test method names in Google style.
      • Single segment (no underscore): follows regular method naming rules
      • Multi-segment (with underscore): each segment must be a valid lowerCamelCase name
      • Each segment must start with lowercase
      • Each segment must be at least 2 characters long
      • No segment may start with a single lowercase followed by uppercase (e.g., "fO")
    • NUMBERING_SUFFIX_PATTERN

      private static final Pattern NUMBERING_SUFFIX_PATTERN
      Pattern to strip trailing numbering suffix (underscore followed by digits).
    • INVALID_UNDERSCORE_PATTERN_REGULAR

      Matches invalid underscore usage for regular methods: leading, trailing, double, or between any characters (letter-letter, letter-digit, digit-letter).
    • INVALID_UNDERSCORE_PATTERN_TEST

      Matches invalid underscore usage for test methods: leading, trailing, or double.
    • TEST_ANNOTATIONS

      private static final Set<String> TEST_ANNOTATIONS
      Set of JUnit test annotation names that indicate a test method.
  • Constructor Details

  • Method Details

    • 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:
    • 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:
    • 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
    • getIdent

      private static DetailAST getIdent(DetailAST ast)
      Returns the IDENT node of the given AST.
      Parameters:
      ast - the AST node
      Returns:
      the IDENT child node
    • hasTestAnnotation

      private static boolean hasTestAnnotation(DetailAST methodDef)
      Checks if the method has any test annotation.
      Parameters:
      methodDef - the METHOD_DEF AST node
      Returns:
      true if the method has @Test, @ParameterizedTest, or @RepeatedTest annotation.
    • validateRegularMethodName

      private void validateRegularMethodName(DetailAST nameAst, String methodName)
      Validates a regular (non-test) method name according to Google style.
      Parameters:
      nameAst - the IDENT AST node containing the method name
      methodName - the method name string
    • validateTestMethodName

      private void validateTestMethodName(DetailAST nameAst, String methodName)
      Validates a test method name according to Google style.
      Parameters:
      nameAst - the IDENT AST node containing the method name
      methodName - the method name string