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.
violateImpliedStaticOnNestedEnum - Control whether to enforce that
static is explicitly coded on nested enums in classes and records.
Type is boolean.
Default value is true.
violateImpliedStaticOnNestedInterface - Control whether to enforce that
static is explicitly coded on nested interfaces in classes and records.
Type is boolean.
Default value is true.
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
AutomaticBean.OutputStreamOptions| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
MSG_KEY
A key is pointing to the warning message text in "messages.properties" file.
|
| Constructor and Description |
|---|
ClassMemberImpliedModifierCheck() |
| Modifier and Type | Method and 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.
|
void |
setViolateImpliedStaticOnNestedEnum(boolean violateImplied)
Setter to control whether to enforce that
static is explicitly coded
on nested enums in classes and records. |
void |
setViolateImpliedStaticOnNestedInterface(boolean violateImplied)
Setter to control whether to enforce that
static is explicitly coded
on nested interfaces in classes and records. |
void |
setViolateImpliedStaticOnNestedRecord(boolean violateImplied)
Setter to control whether to enforce that
static is explicitly coded
on nested records in classes and records. |
void |
visitToken(DetailAST ast)
Called to process a token.
|
beginTree, clearMessages, destroy, finishTree, getFileContents, getLine, getLines, getMessages, getTabWidth, getTokenNames, init, isCommentNodesRequired, leaveToken, log, log, log, setFileContents, setTabWidth, setTokensfinishLocalSetup, getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, setId, setSeverityconfigure, contextualize, getConfiguration, setupChildpublic static final java.lang.String MSG_KEY
public ClassMemberImpliedModifierCheck()
public void setViolateImpliedStaticOnNestedEnum(boolean violateImplied)
static is explicitly coded
on nested enums in classes and records.violateImplied - True to perform the check, false to turn the check off.public void setViolateImpliedStaticOnNestedInterface(boolean violateImplied)
static is explicitly coded
on nested interfaces in classes and records.violateImplied - True to perform the check, false to turn the check off.public void setViolateImpliedStaticOnNestedRecord(boolean violateImplied)
static is explicitly coded
on nested records in classes and records.violateImplied - True to perform the check, false to turn the check off.public int[] getDefaultTokens()
AbstractCheckgetDefaultTokens in class AbstractCheckTokenTypespublic int[] getRequiredTokens()
AbstractCheckgetRequiredTokens in class AbstractCheckTokenTypespublic int[] getAcceptableTokens()
AbstractCheckgetAcceptableTokens in class AbstractCheckTokenTypespublic void visitToken(DetailAST ast)
AbstractCheckvisitToken in class AbstractCheckast - the token to processCopyright © 2001-2020. All Rights Reserved.