Class ClassMemberImpliedModifierCheck

All Implemented Interfaces:
Configurable, Contextualizable

Checks for implicit modifiers on nested types in classes and records.

This check is effectively the opposite of RedundantModifier. It checks the modifiers on nested types in classes and records, ensuring that certain modifiers are explicitly specified even though they are actually redundant.

Nested enums, interfaces, and records within a class are always static and as such the compiler does not require the static modifier. This check provides the ability to enforce that the static modifier is explicitly coded and not implicitly added by the compiler.

 public final class Person {
   enum Age {  // violation
     CHILD, ADULT
   }
 }
 

Rationale for this check: Nested enums, interfaces, and records are treated differently from nested classes as they are only allowed to be static. Developers should not need to remember this rule, and this check provides the means to enforce that the modifier is coded explicitly.

  • Property violateImpliedStaticOnNestedEnum - Control whether to enforce that static is explicitly coded on nested enums in classes and records. Type is boolean. Default value is true.
  • Property violateImpliedStaticOnNestedInterface - Control whether to enforce that static is explicitly coded on nested interfaces in classes and records. Type is boolean. Default value is true.
  • Property violateImpliedStaticOnNestedRecord - Control whether to enforce that static is explicitly coded on nested records in classes and records. Type is boolean. Default value is true.

Parent is com.puppycrawl.tools.checkstyle.TreeWalker

Violation Message Keys:

  • class.implied.modifier
Since:
8.16
  • Field Details

  • Constructor Details

  • Method Details

    • setViolateImpliedStaticOnNestedEnum

      public void setViolateImpliedStaticOnNestedEnum(boolean violateImplied)
      Setter to control whether to enforce that static is explicitly coded on nested enums in classes and records.
      Parameters:
      violateImplied - True to perform the check, false to turn the check off.
      Since:
      8.16
    • setViolateImpliedStaticOnNestedInterface

      public void setViolateImpliedStaticOnNestedInterface(boolean violateImplied)
      Setter to control whether to enforce that static is explicitly coded on nested interfaces in classes and records.
      Parameters:
      violateImplied - True to perform the check, false to turn the check off.
      Since:
      8.16
    • setViolateImpliedStaticOnNestedRecord

      public void setViolateImpliedStaticOnNestedRecord(boolean violateImplied)
      Setter to control whether to enforce that static is explicitly coded on nested records in classes and records.
      Parameters:
      violateImplied - True to perform the check, false to turn the check off.
      Since:
      8.36
    • 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:
    • 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:
    • 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
    • isInTypeBlock

      private static boolean isInTypeBlock(DetailAST ast)
      Checks if ast is in a class, enum, anon class or record block.
      Parameters:
      ast - the current ast
      Returns:
      true if ast is in a class, enum, anon class or record