public final class AbstractClassNameCheck extends AbstractCheck
Ensures that the names of abstract classes conforming to some pattern
and check that abstract modifier exists.
Rationale: Abstract classes are convenience base class implementations of interfaces, not types as such. As such they should be named to indicate this. Also if names of classes starts with 'Abstract' it's very convenient that they will have abstract modifier.
format - Specify valid identifiers.
Type is java.util.regex.Pattern.
Default value is "^Abstract.+$".ignoreModifier - Control whether to ignore checking for the
abstract modifier on classes that match the name.
Type is boolean.
Default value is false.ignoreName - Control whether to ignore checking the name.
Realistically only useful if using the check to identify that match name and
do not have the abstract modifier.
Type is boolean.
Default value is false.
To configure the check:
<module name="AbstractClassName"/>
Example:
abstract class AbstractFirstClass {} // OK
abstract class SecondClass {} // violation, it should match pattern "^Abstract.+$"
class AbstractThirdClass {} // violation, must be declared 'abstract'
class FourthClass {} // OK
To configure the check so that it check name
but ignore abstract modifier:
<module name="AbstractClassName"> <property name="ignoreModifier" value="true"/> </module>
Example:
abstract class AbstractFirstClass {} // OK
abstract class SecondClass {} // violation, it should match pattern "^Abstract.+$"
class AbstractThirdClass {} // OK, no "abstract" modifier
class FourthClass {} // OK
To configure the check to ignore name validation when class declared as 'abstract'
<module name="AbstractClassName"> <property name="ignoreName" value="true"/> </module>
Example:
abstract class AbstractFirstClass {} // OK
abstract class SecondClass {} // OK, name validation is ignored
class AbstractThirdClass {} // violation, must be declared as 'abstract'
class FourthClass {} // OK, no "abstract" modifier
To configure the check
with format:
<module name="AbstractClassName"> <property name="format" value="^Generator.+$"/> </module>
Example:
abstract class GeneratorFirstClass {} // OK
abstract class SecondClass {} // violation, must match pattern '^Generator.+$'
class GeneratorThirdClass {} // violation, must be declared 'abstract'
class FourthClass {} // OK, no "abstract" modifier
Parent is com.puppycrawl.tools.checkstyle.TreeWalker
Violation Message Keys:
illegal.abstract.class.name
no.abstract.class.modifier
AutomaticBean.OutputStreamOptions| Modifier and Type | Field and Description |
|---|---|
private java.util.regex.Pattern |
format
Specify valid identifiers.
|
private boolean |
ignoreModifier
Control whether to ignore checking for the
abstract modifier on
classes that match the name. |
private boolean |
ignoreName
Control whether to ignore checking the name.
|
static java.lang.String |
MSG_ILLEGAL_ABSTRACT_CLASS_NAME
A key is pointing to the warning message text in "messages.properties"
file.
|
static java.lang.String |
MSG_NO_ABSTRACT_CLASS_MODIFIER
A key is pointing to the warning message text in "messages.properties"
file.
|
| Constructor and Description |
|---|
AbstractClassNameCheck() |
| 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.
|
private static boolean |
isAbstract(DetailAST ast)
Checks if declared class is abstract or not.
|
private boolean |
isMatchingClassName(java.lang.String className)
Returns true if class name matches format of abstract class names.
|
void |
setFormat(java.util.regex.Pattern pattern)
Setter to specify valid identifiers.
|
void |
setIgnoreModifier(boolean value)
Setter to control whether to ignore checking for the
abstract modifier on
classes that match the name. |
void |
setIgnoreName(boolean value)
Setter to control whether to ignore checking the name.
|
private void |
visitClassDef(DetailAST ast)
Checks class definition.
|
void |
visitToken(DetailAST ast)
Called to process a token.
|
beginTree, clearViolations, destroy, finishTree, getFileContents, getLine, getLineCodePoints, getLines, getTabWidth, getTokenNames, getViolations, 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_ILLEGAL_ABSTRACT_CLASS_NAME
public static final java.lang.String MSG_NO_ABSTRACT_CLASS_MODIFIER
private boolean ignoreModifier
abstract modifier on
classes that match the name.private boolean ignoreName
abstract modifier.private java.util.regex.Pattern format
public AbstractClassNameCheck()
public void setIgnoreModifier(boolean value)
abstract modifier on
classes that match the name.value - new valuepublic void setIgnoreName(boolean value)
abstract modifier.value - new value.public void setFormat(java.util.regex.Pattern pattern)
pattern - the new patternpublic 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 processprivate void visitClassDef(DetailAST ast)
ast - class definition for check.private static boolean isAbstract(DetailAST ast)
ast - class definition for check.private boolean isMatchingClassName(java.lang.String className)
className - class name for check.Copyright © 2001-2022. All Rights Reserved.