public class FinalClassCheck extends AbstractCheck
Checks that class which has only private ctors
is declared as final. Doesn't check for classes nested in interfaces
or annotations, as they are always final
there.
An example of how to configure the check is:
<module name="FinalClass"/>
Modifier and Type | Class and Description |
---|---|
private static class |
FinalClassCheck.ClassDesc
Maintains information about class' ctors.
|
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.
|
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 java.lang.String |
extractQualifiedName(DetailAST classExtend)
Get name of class(with qualified package if specified) in extend clause.
|
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.
|
destroy, finishTree, getClassLoader, getFileContents, getLine, getLines, getTabWidth, getTokenNames, init, isCommentNodesRequired, log, log, setClassLoader, setFileContents, setMessages, setTabWidth, setTokens
getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, log, setId, setSeverity
configure, contextualize, finishLocalSetup, getConfiguration, setupChild
public static final java.lang.String MSG_KEY
public static final java.lang.String PACKAGE_SEPARATOR
private java.util.Deque<FinalClassCheck.ClassDesc> classes
private java.lang.String packageName
public int[] getDefaultTokens()
AbstractCheck
getDefaultTokens
in class AbstractCheck
TokenTypes
public int[] getAcceptableTokens()
AbstractCheck
getAcceptableTokens
in class AbstractCheck
TokenTypes
public int[] getRequiredTokens()
AbstractCheck
getRequiredTokens
in class AbstractCheck
TokenTypes
public void beginTree(DetailAST rootAST)
AbstractCheck
beginTree
in class AbstractCheck
rootAST
- the root of the treepublic void visitToken(DetailAST ast)
AbstractCheck
visitToken
in class AbstractCheck
ast
- the token to processpublic void leaveToken(DetailAST ast)
AbstractCheck
leaveToken
in class AbstractCheck
ast
- the token leavingprivate static java.lang.String extractQualifiedName(DetailAST classExtend)
classExtend
- extend clause to extract class nameprivate void registerNestedSubclassToOuterSuperClasses(DetailAST classAst)
classAst
- class which outer super classes will be
informed about nesting subclassprivate 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 name