public final class OneStatementPerLineCheck extends AbstractCheck
Rationale: It's very difficult to read multiple statements on one line.
In the Java programming language, statements are the fundamental unit of execution. All statements except blocks are terminated by a semicolon. Blocks are denoted by open and close curly braces.
OneStatementPerLineCheck checks the following types of statements: variable declaration statements, empty statements, assignment statements, expression statements, increment statements, object creation statements, 'for loop' statements, 'break' statements, 'continue' statements, 'return' statements, import statements.
The following examples will be flagged as a violation:
//Each line causes violation: int var1; int var2; var1 = 1; var2 = 2; int var1 = 1; int var2 = 2; var1++; var2++; Object obj1 = new Object(); Object obj2 = new Object(); import java.io.EOFException; import java.io.BufferedReader; ;; //two empty statements on the same line. //Multi-line statements: int var1 = 1 ; var2 = 2; //violation here int o = 1, p = 2, r = 5; int t; //violation here
Modifier and Type | Field and Description |
---|---|
private java.util.Deque<java.lang.Integer> |
countOfSemiInLambda
Counts number of semicolons in nested lambdas.
|
private int |
forStatementEnd
Hold the line-number where the last 'for-loop' statement ended.
|
private boolean |
inForHeader
The for-header usually has 3 statements on one line, but THIS IS OK.
|
private boolean |
isInLambda
Holds if current token is inside lambda.
|
private int |
lambdaStatementEnd
Hold the line-number where the last lambda statement ended.
|
private int |
lastStatementEnd
Hold the line-number where the last statement ended.
|
static java.lang.String |
MSG_KEY
A key is pointing to the warning message text in "messages.properties"
file.
|
Constructor and Description |
---|
OneStatementPerLineCheck() |
Modifier and Type | Method and Description |
---|---|
void |
beginTree(DetailAST rootAST)
Called before the starting to process a tree.
|
private void |
checkIfSemicolonIsInDifferentLineThanPrevious(DetailAST ast)
Checks if given semicolon is in different line than previous.
|
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 |
isMultilineStatement(DetailAST ast)
Checks whether statement is multiline.
|
private static boolean |
isOnTheSameLine(DetailAST ast,
int lastStatementEnd,
int forStatementEnd,
int lambdaStatementEnd)
Checks whether two statements are on the same line.
|
void |
leaveToken(DetailAST ast)
Called after all the child nodes have been process.
|
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
private final java.util.Deque<java.lang.Integer> countOfSemiInLambda
private int lastStatementEnd
private int forStatementEnd
private boolean inForHeader
private boolean isInLambda
private int lambdaStatementEnd
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 void checkIfSemicolonIsInDifferentLineThanPrevious(DetailAST ast)
ast
- semicolon to checkprivate static boolean isOnTheSameLine(DetailAST ast, int lastStatementEnd, int forStatementEnd, int lambdaStatementEnd)
ast
- token for the current statement.lastStatementEnd
- the line-number where the last statement ended.forStatementEnd
- the line-number where the last 'for-loop'
statement ended.lambdaStatementEnd
- the line-number where the last lambda
statement ended.private static boolean isMultilineStatement(DetailAST ast)
ast
- token for the current statement.