public class EmptyLineSeparatorCheck extends AbstractCheck
By default the check will check the following statements:
PACKAGE_DEF
,
IMPORT
,
CLASS_DEF
,
INTERFACE_DEF
,
STATIC_INIT
,
INSTANCE_INIT
,
METHOD_DEF
,
CTOR_DEF
,
VARIABLE_DEF
.
Example of declarations without empty line separator:
/////////////////////////////////////////////////// //HEADER /////////////////////////////////////////////////// package com.puppycrawl.tools.checkstyle.whitespace; import java.io.Serializable; class Foo { public static final int FOO_CONST = 1; public void foo() {} //should be separated from previous statement. }
An example of how to configure the check with default parameters is:
<module name="EmptyLineSeparator"/>
Example of declarations with empty line separator that is expected by the Check by default:
/////////////////////////////////////////////////// //HEADER /////////////////////////////////////////////////// package com.puppycrawl.tools.checkstyle.whitespace; import java.io.Serializable; class Foo { public static final int FOO_CONST = 1; public void foo() {} }
An example how to check empty line after
VARIABLE_DEF
and
METHOD_DEF
:
<module name="EmptyLineSeparator"> <property name="tokens" value="VARIABLE_DEF, METHOD_DEF"/> </module>
An example how to allow no empty line between fields:
<module name="EmptyLineSeparator"> <property name="allowNoEmptyLineBetweenFields" value="true"/> </module>
Example of declarations with multiple empty lines between class members (allowed by default):
/////////////////////////////////////////////////// //HEADER /////////////////////////////////////////////////// package com.puppycrawl.tools.checkstyle.whitespace; import java.io.Serializable; class Foo { public static final int FOO_CONST = 1; public void foo() {} }
An example how to disallow multiple empty lines between class members:
<module name="EmptyLineSeparator"> <property name="allowMultipleEmptyLines" value="false"/> </module>
An example how to disallow multiple empty line inside methods, constructors, etc.:
<module name="EmptyLineSeparator"> <property name="allowMultipleEmptyLinesInsideClassMembers" value="false"/> </module>
The check is valid only for statements that have body:
TokenTypes.CLASS_DEF
,
TokenTypes.INTERFACE_DEF
,
TokenTypes.ENUM_DEF
,
TokenTypes.STATIC_INIT
,
TokenTypes.INSTANCE_INIT
,
TokenTypes.METHOD_DEF
,
TokenTypes.CTOR_DEF
Example of declarations with multiple empty lines inside method:
/////////////////////////////////////////////////// //HEADER /////////////////////////////////////////////////// package com.puppycrawl.tools.checkstyle.whitespace; class Foo { public void foo() { System.out.println(1); // violation since method has 2 empty lines subsequently } }
Modifier and Type | Field and Description |
---|---|
private boolean |
allowMultipleEmptyLines
Allows multiple empty lines between class members.
|
private boolean |
allowMultipleEmptyLinesInsideClassMembers
Allows multiple empty lines inside class members.
|
private boolean |
allowNoEmptyLineBetweenFields
Allows no empty line between fields.
|
static java.lang.String |
MSG_MULTIPLE_LINES
A key is pointing to the warning message empty.line.separator.multiple.lines
in "messages.properties"
file.
|
static java.lang.String |
MSG_MULTIPLE_LINES_AFTER
A key is pointing to the warning message empty.line.separator.lines.after
in "messages.properties" file.
|
static java.lang.String |
MSG_MULTIPLE_LINES_INSIDE
A key is pointing to the warning message empty.line.separator.multiple.lines.inside
in "messages.properties" file.
|
static java.lang.String |
MSG_SHOULD_BE_SEPARATED
A key is pointing to the warning message empty.line.separator in "messages.properties"
file.
|
Constructor and Description |
---|
EmptyLineSeparatorCheck() |
Modifier and Type | Method and Description |
---|---|
int[] |
getAcceptableTokens()
The configurable token set.
|
int[] |
getDefaultTokens()
Returns the default token a check is interested in.
|
private java.util.List<java.lang.Integer> |
getEmptyLines(DetailAST ast)
Get list of empty lines.
|
private static java.util.List<java.lang.Integer> |
getEmptyLinesToLog(java.util.List<java.lang.Integer> emptyLines)
Get list of empty lines to log.
|
int[] |
getRequiredTokens()
The tokens that this check must be registered for.
|
private boolean |
hasEmptyLine(int startLine,
int endLine)
Checks, whether there are empty lines within the specified line range.
|
private boolean |
hasEmptyLineAfter(DetailAST token)
Checks if token have empty line after.
|
private boolean |
hasEmptyLineBefore(DetailAST token)
Checks if a token has a empty line before.
|
private boolean |
hasMultipleLinesBefore(DetailAST ast)
Whether the token has not allowed multiple empty lines before.
|
private boolean |
hasNotAllowedTwoEmptyLinesBefore(DetailAST token)
Checks if a token has empty two previous lines and multiple empty lines is not allowed.
|
private static boolean |
isClassMemberBlock(int astType)
Whether the AST is a class member block.
|
private static boolean |
isComment(DetailAST ast)
Check if token is a comment.
|
boolean |
isCommentNodesRequired()
Whether comment nodes are required or not.
|
private static boolean |
isPrecededByJavadoc(DetailAST token)
Check if token is preceded by javadoc comment.
|
private boolean |
isPrePreviousLineEmpty(DetailAST token)
Checks if a token has empty pre-previous line.
|
private static boolean |
isTypeField(DetailAST variableDef)
If variable definition is a type field.
|
private boolean |
isViolatingEmptyLineBetweenFieldsPolicy(DetailAST detailAST)
Checks whether token placement violates policy of empty line between fields.
|
private void |
processImport(DetailAST ast,
DetailAST nextToken,
int astType)
Process Import.
|
private void |
processMultipleLinesInside(DetailAST ast)
Log violation in case there are multiple empty lines inside constructor,
initialization block or method.
|
private void |
processPackage(DetailAST ast,
DetailAST nextToken)
Process Package.
|
private void |
processVariableDef(DetailAST ast,
DetailAST nextToken)
Process Variable.
|
void |
setAllowMultipleEmptyLines(boolean allow)
Allow multiple empty lines between class members.
|
void |
setAllowMultipleEmptyLinesInsideClassMembers(boolean allow)
Allow multiple empty lines inside class members.
|
void |
setAllowNoEmptyLineBetweenFields(boolean allow)
Allow no empty line between fields.
|
void |
visitToken(DetailAST ast)
Called to process a token.
|
beginTree, destroy, finishTree, getClassLoader, getFileContents, getLine, getLines, getTabWidth, getTokenNames, init, leaveToken, 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_SHOULD_BE_SEPARATED
public static final java.lang.String MSG_MULTIPLE_LINES
public static final java.lang.String MSG_MULTIPLE_LINES_AFTER
public static final java.lang.String MSG_MULTIPLE_LINES_INSIDE
private boolean allowNoEmptyLineBetweenFields
private boolean allowMultipleEmptyLines
private boolean allowMultipleEmptyLinesInsideClassMembers
public final void setAllowNoEmptyLineBetweenFields(boolean allow)
allow
- User's value.public void setAllowMultipleEmptyLines(boolean allow)
allow
- User's value.public void setAllowMultipleEmptyLinesInsideClassMembers(boolean allow)
allow
- User's value.public boolean isCommentNodesRequired()
AbstractCheck
isCommentNodesRequired
in class AbstractCheck
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 visitToken(DetailAST ast)
AbstractCheck
visitToken
in class AbstractCheck
ast
- the token to processprivate void processMultipleLinesInside(DetailAST ast)
ast
- the ast to check.private static boolean isClassMemberBlock(int astType)
astType
- the AST to check.private java.util.List<java.lang.Integer> getEmptyLines(DetailAST ast)
ast
- the ast to check.private static java.util.List<java.lang.Integer> getEmptyLinesToLog(java.util.List<java.lang.Integer> emptyLines)
emptyLines
- list of empty lines.private boolean hasMultipleLinesBefore(DetailAST ast)
ast
- the ast to check.private void processPackage(DetailAST ast, DetailAST nextToken)
ast
- tokennextToken
- next tokenprivate void processImport(DetailAST ast, DetailAST nextToken, int astType)
ast
- tokennextToken
- next tokenastType
- token Typeprivate void processVariableDef(DetailAST ast, DetailAST nextToken)
ast
- tokennextToken
- next Tokenprivate boolean isViolatingEmptyLineBetweenFieldsPolicy(DetailAST detailAST)
detailAST
- token to be analyzedprivate boolean hasNotAllowedTwoEmptyLinesBefore(DetailAST token)
token
- DetailAST tokenprivate boolean isPrePreviousLineEmpty(DetailAST token)
token
- DetailAST token.private boolean hasEmptyLineAfter(DetailAST token)
token
- token.private boolean hasEmptyLine(int startLine, int endLine)
startLine
- number of the first line in the rangeendLine
- number of the second line in the rangetrue
if found any blank line within the range, false
otherwiseprivate boolean hasEmptyLineBefore(DetailAST token)
token
- token.private static boolean isPrecededByJavadoc(DetailAST token)
token
- token for check.private static boolean isComment(DetailAST ast)
ast
- ast nodeprivate static boolean isTypeField(DetailAST variableDef)
variableDef
- variable definition.