public class FinalClassCheck extends AbstractCheck
Checks that a class which has only private constructors
is declared as final. Doesn't check for classes nested in interfaces
or annotations, as they are always final there.
To configure the check:
<module name="FinalClass"/>
Example:
final class MyClass { // OK
private MyClass() { }
}
class MyClass { // violation, class should be declared final
private MyClass() { }
}
class MyClass { // OK, since it has a public constructor
int field1;
String field2;
private MyClass(int value) {
this.field1 = value;
this.field2 = " ";
}
public MyClass(String value) {
this.field2 = value;
this.field1 = 0;
}
}
interface CheckInterface
{
class MyClass { // OK, nested class in interface is always final
private MyClass() {}
}
}
public @interface Test {
public boolean enabled()
default true;
class MyClass { // OK, class nested in an annotation is always final
private MyClass() { }
}
}
class TestAnonymousInnerClasses { // OK, class has an anonymous inner class.
public static final TestAnonymousInnerClasses ONE = new TestAnonymousInnerClasses() {
};
private TestAnonymousInnerClasses() {
}
}
Parent is com.puppycrawl.tools.checkstyle.TreeWalker
Violation Message Keys:
final.class
| Modifier and Type | Class and Description |
|---|---|
private static class |
FinalClassCheck.ClassDesc
Maintains information about class' ctors.
|
AutomaticBean.OutputStreamOptions| Modifier and Type | Field and Description |
|---|---|
private java.util.Deque<FinalClassCheck.ClassDesc> |
classes
Keeps ClassDesc objects for stack of declared classes.
|
static java.lang.String |
MSG_KEY
A key is pointing to the warning message text in "messages.properties"
file.
|
private static java.lang.String |
PACKAGE_SEPARATOR
Character separate package names in qualified name of java class.
|
private java.lang.String |
packageName
Full qualified name of the package.
|
| Constructor and Description |
|---|
FinalClassCheck() |
| Modifier and Type | Method and Description |
|---|---|
void |
beginTree(DetailAST rootAST)
Called before the starting to process a tree.
|
private static boolean |
doesNameInExtendMatchSuperClassName(java.lang.String superClassQualifiedName,
java.lang.String superClassInExtendClause)
Checks if given super class name in extend clause match super class qualified name.
|
private static boolean |
doesNameOfClassMatchAnonymousInnerClassName(DetailAST ast,
FinalClassCheck.ClassDesc classDesc)
Check if class name matches with anonymous inner class name.
|
private static java.lang.String |
extractQualifiedName(DetailAST ast)
Get name of class (with qualified package if specified) in
ast. |
int[] |
getAcceptableTokens()
The configurable token set.
|
private static java.lang.String |
getClassNameFromQualifiedName(java.lang.String qualifiedName)
Get class name from qualified name.
|
int[] |
getDefaultTokens()
Returns the default token a check is interested in.
|
private java.lang.String |
getQualifiedClassName(DetailAST classAst)
Get qualified class name from given class Ast.
|
private static java.lang.String |
getQualifiedClassName(java.lang.String packageName,
java.lang.String outerClassQualifiedName,
java.lang.String className)
Calculate qualified class name(package + class name) laying inside given
outer class.
|
int[] |
getRequiredTokens()
The tokens that this check must be registered for.
|
private static java.lang.String |
getSuperClassName(DetailAST classAst)
Get super class name of given class.
|
void |
leaveToken(DetailAST ast)
Called after all the child nodes have been process.
|
private void |
registerNestedSubclassToOuterSuperClasses(DetailAST classAst)
Register to outer super classes of given classAst that
given classAst is extending them.
|
void |
visitToken(DetailAST ast)
Called to process a token.
|
clearViolations, destroy, finishTree, getFileContents, getLine, getLineCodePoints, getLines, getTabWidth, getTokenNames, getViolations, init, isCommentNodesRequired, log, log, log, setFileContents, setTabWidth, setTokensfinishLocalSetup, getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, setId, setSeverityconfigure, contextualize, getConfiguration, setupChildpublic static final java.lang.String MSG_KEY
private static final java.lang.String PACKAGE_SEPARATOR
private java.util.Deque<FinalClassCheck.ClassDesc> classes
private java.lang.String packageName
public FinalClassCheck()
public int[] getDefaultTokens()
AbstractCheckgetDefaultTokens in class AbstractCheckTokenTypespublic int[] getAcceptableTokens()
AbstractCheckgetAcceptableTokens in class AbstractCheckTokenTypespublic int[] getRequiredTokens()
AbstractCheckgetRequiredTokens in class AbstractCheckTokenTypespublic void beginTree(DetailAST rootAST)
AbstractCheckbeginTree in class AbstractCheckrootAST - the root of the treepublic void visitToken(DetailAST ast)
AbstractCheckvisitToken in class AbstractCheckast - the token to processpublic void leaveToken(DetailAST ast)
AbstractCheckleaveToken in class AbstractCheckast - the token leavingprivate static java.lang.String extractQualifiedName(DetailAST ast)
ast.ast - ast to extract class name fromprivate void registerNestedSubclassToOuterSuperClasses(DetailAST classAst)
classAst - class which outer super classes will be
informed about nesting subclassprivate static boolean doesNameOfClassMatchAnonymousInnerClassName(DetailAST ast, FinalClassCheck.ClassDesc classDesc)
ast - current ast.classDesc - class to match.private java.lang.String getQualifiedClassName(DetailAST classAst)
classAst - class to get qualified class nameprivate static java.lang.String getQualifiedClassName(java.lang.String packageName, java.lang.String outerClassQualifiedName, java.lang.String className)
packageName - package name, empty string on default packageouterClassQualifiedName - qualified name(package + class) of outer class,
null if doesn't existclassName - class nameprivate static java.lang.String getSuperClassName(DetailAST classAst)
classAst - classprivate static boolean doesNameInExtendMatchSuperClassName(java.lang.String superClassQualifiedName, java.lang.String superClassInExtendClause)
superClassQualifiedName - super class qualified name (with package)superClassInExtendClause - name in extend clauseprivate static java.lang.String getClassNameFromQualifiedName(java.lang.String qualifiedName)
qualifiedName - qualified class nameCopyright © 2001-2022. All Rights Reserved.