Class ClassMemberImpliedModifierCheck

All Implemented Interfaces:
Configurable, Contextualizable

public class ClassMemberImpliedModifierCheck extends AbstractCheck

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.

To configure the check so that it checks that all implicit modifiers on nested interfaces, enums, and records are explicitly specified in classes and records.

Configuration:

 <module name="ClassMemberImpliedModifier" />
 

Code:

 public final class Person {
   static interface Address1 {  // valid
   }

   interface Address2 {  // violation
   }

   static enum Age1 {  // valid
     CHILD, ADULT
   }

   enum Age2 {  // violation
     CHILD, ADULT
   }

   public static record GoodRecord() {} // valid
   public record BadRecord() {} // violation

   public static record OuterRecord() {
     static record InnerRecord1(){} // valid
     record InnerRecord2(){} // violation
   }
 }
 

Parent is com.puppycrawl.tools.checkstyle.TreeWalker

Violation Message Keys:

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

    • MSG_KEY

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

    • ClassMemberImpliedModifierCheck

      public ClassMemberImpliedModifierCheck()
  • 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.
    • 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.
    • 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.
    • 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