public class DeclarationOrderCheck extends AbstractCheck
ATTENTION: the check skips class fields which have forward references from validation due to the fact that we have Checkstyle's limitations to clearly detect user intention of fields location and grouping. For example,
public class A {
private double x = 1.0;
private double y = 2.0;
public double slope = x / y; // will be skipped from validation due to forward reference
}
Available options:
Purpose of ignore* option is to ignore related violations, however it still impacts on other class members.
For example:
class K {
int a;
void m(){}
K(){} <-- "Constructor definition in wrong order"
int b; <-- "Instance variable definition in wrong order"
}
With ignoreConstructors option:
class K {
int a;
void m(){}
K(){}
int b; <-- "Instance variable definition in wrong order"
}
With ignoreConstructors option and without a method definition in a source class:
class K {
int a;
K(){}
int b; <-- "Instance variable definition in wrong order"
}
An example of how to configure the check is:
<module name="DeclarationOrder"/>
Modifier and Type | Class and Description |
---|---|
private static class |
DeclarationOrderCheck.ScopeState
Private class to encapsulate the state.
|
Modifier and Type | Field and Description |
---|---|
private java.util.Set<java.lang.String> |
classFieldNames
Set of all class field names.
|
private boolean |
ignoreConstructors
If true, ignores the check to constructors.
|
private boolean |
ignoreModifiers
If true, ignore the check to modifiers (fields, ...).
|
static java.lang.String |
MSG_ACCESS
A key is pointing to the warning message text in "messages.properties"
file.
|
static java.lang.String |
MSG_CONSTRUCTOR
A key is pointing to the warning message text in "messages.properties"
file.
|
static java.lang.String |
MSG_INSTANCE
A key is pointing to the warning message text in "messages.properties"
file.
|
static java.lang.String |
MSG_STATIC
A key is pointing to the warning message text in "messages.properties"
file.
|
private java.util.Deque<DeclarationOrderCheck.ScopeState> |
scopeStates
List of Declaration States.
|
private static int |
STATE_CTOR_DEF
State for the CTOR_DEF.
|
private static int |
STATE_INSTANCE_VARIABLE_DEF
State for the VARIABLE_DEF.
|
private static int |
STATE_METHOD_DEF
State for the METHOD_DEF.
|
private static int |
STATE_STATIC_VARIABLE_DEF
State for the VARIABLE_DEF.
|
Constructor and Description |
---|
DeclarationOrderCheck() |
Modifier and Type | Method and Description |
---|---|
void |
beginTree(DetailAST rootAST)
Called before the starting to process a tree.
|
int[] |
getAcceptableTokens()
The configurable token set.
|
private static java.util.Set<DetailAST> |
getAllTokensOfType(DetailAST ast,
int tokenType)
Collects all tokens of specific type starting with the current ast node.
|
int[] |
getDefaultTokens()
Returns the default token a check is interested in.
|
int[] |
getRequiredTokens()
The tokens that this check must be registered for.
|
private boolean |
isForwardReference(DetailAST fieldDef)
Checks whether an identifier references a field which has been already defined in class.
|
void |
leaveToken(DetailAST ast)
Called after all the child nodes have been process.
|
private void |
processConstructor(DetailAST ast)
Processes constructor.
|
private void |
processModifiers(DetailAST ast)
Processes modifiers.
|
private boolean |
processModifiersState(DetailAST modifierAst,
DeclarationOrderCheck.ScopeState state)
Process if given modifiers are appropriate in given state
(
STATE_STATIC_VARIABLE_DEF , STATE_INSTANCE_VARIABLE_DEF ,
(STATE_CTOR_DEF , STATE_METHOD_DEF ), if it is
it updates states where appropriate or logs violation. |
private void |
processModifiersSubState(DetailAST modifiersAst,
DeclarationOrderCheck.ScopeState state,
boolean isStateValid)
Checks if given modifiers are valid in substate of given
state(
Scope ), if it is it updates substate or else it
logs violation. |
void |
setIgnoreConstructors(boolean ignoreConstructors)
Sets whether to ignore constructors.
|
void |
setIgnoreModifiers(boolean ignoreModifiers)
Sets whether to ignore modifiers.
|
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_CONSTRUCTOR
public static final java.lang.String MSG_STATIC
public static final java.lang.String MSG_INSTANCE
public static final java.lang.String MSG_ACCESS
private static final int STATE_STATIC_VARIABLE_DEF
private static final int STATE_INSTANCE_VARIABLE_DEF
private static final int STATE_CTOR_DEF
private static final int STATE_METHOD_DEF
private java.util.Deque<DeclarationOrderCheck.ScopeState> scopeStates
private java.util.Set<java.lang.String> classFieldNames
private boolean ignoreConstructors
private boolean ignoreModifiers
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 processprivate void processConstructor(DetailAST ast)
ast
- constructor AST.private void processModifiers(DetailAST ast)
ast
- ast of Modifiers.private boolean processModifiersState(DetailAST modifierAst, DeclarationOrderCheck.ScopeState state)
STATE_STATIC_VARIABLE_DEF
, STATE_INSTANCE_VARIABLE_DEF
,
(STATE_CTOR_DEF
, STATE_METHOD_DEF
), if it is
it updates states where appropriate or logs violation.modifierAst
- modifiers to processstate
- current stateprivate void processModifiersSubState(DetailAST modifiersAst, DeclarationOrderCheck.ScopeState state, boolean isStateValid)
Scope
), if it is it updates substate or else it
logs violation.modifiersAst
- modifiers to processstate
- current stateisStateValid
- is main state for given modifiers is validprivate boolean isForwardReference(DetailAST fieldDef)
fieldDef
- a field definition.private static java.util.Set<DetailAST> getAllTokensOfType(DetailAST ast, int tokenType)
ast
- ast node.tokenType
- token type.public void leaveToken(DetailAST ast)
AbstractCheck
leaveToken
in class AbstractCheck
ast
- the token leavingpublic void setIgnoreConstructors(boolean ignoreConstructors)
ignoreConstructors
- whether to ignore constructors.public void setIgnoreModifiers(boolean ignoreModifiers)
ignoreModifiers
- whether to ignore modifiers.