Class WhitespaceAroundCheck
- java.lang.Object
-
- com.puppycrawl.tools.checkstyle.AbstractAutomaticBean
-
- com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
-
- com.puppycrawl.tools.checkstyle.api.AbstractCheck
-
- com.puppycrawl.tools.checkstyle.checks.whitespace.WhitespaceAroundCheck
-
- All Implemented Interfaces:
Configurable
,Contextualizable
public class WhitespaceAroundCheck extends AbstractCheck
Checks that a token is surrounded by whitespace. Empty constructor, method, class, enum, interface, loop bodies (blocks), lambdas of the formpublic MyClass() {} // empty constructor public void func() {} // empty method public interface Foo {} // empty interface public class Foo {} // empty class public enum Foo {} // empty enum MyClass c = new MyClass() {}; // empty anonymous class while (i = 1) {} // empty while loop for (int i = 1; i > 1; i++) {} // empty for loop do {} while (i = 1); // empty do-while loop Runnable noop = () -> {}; // empty lambda public @interface Beta {} // empty annotation type
may optionally be exempted from the policy using the
allowEmptyMethods
,allowEmptyConstructors
,allowEmptyTypes
,allowEmptyLoops
,allowEmptyLambdas
,allowEmptyCatches
andallowEmptySwitchBlockStatements
properties.This check does not flag as violation double brace initialization like:
new Properties() {{ setProperty("key", "value"); }};
Parameter allowEmptyCatches allows to suppress violations when token list contains SLIST to check if beginning of block is surrounded by whitespace and catch block is empty, for example:
try { k = 5 / i; } catch (ArithmeticException ex) {}
With this property turned off, this raises violation because the beginning of the catch block (left curly bracket) is not separated from the end of the catch block (right curly bracket).
Note: Switch expressions are ignored by this check.
-
Property
allowEmptyCatches
- Allow empty catch bodies. Type isboolean
. Default value isfalse
. -
Property
allowEmptyConstructors
- Allow empty constructor bodies. Type isboolean
. Default value isfalse
. -
Property
allowEmptyLambdas
- Allow empty lambda bodies. Type isboolean
. Default value isfalse
. -
Property
allowEmptyLoops
- Allow empty loop bodies. Type isboolean
. Default value isfalse
. -
Property
allowEmptyMethods
- Allow empty method bodies. Type isboolean
. Default value isfalse
. -
Property
allowEmptySwitchBlockStatements
- Allow empty switch blocks and block statements. Type isboolean
. Default value isfalse
. -
Property
allowEmptyTypes
- Allow empty class, interface and enum bodies. Type isboolean
. Default value isfalse
. -
Property
ignoreEnhancedForColon
- Ignore whitespace around colon in enhanced for loop. Type isboolean
. Default value istrue
. -
Property
tokens
- tokens to check Type isjava.lang.String[]
. Validation type istokenSet
. Default value is: ASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, DO_WHILE, EQUAL, GE, GT, LAMBDA, LAND, LCURLY, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN, LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, RCURLY, SL, SLIST, SL_ASSIGN, SR, SR_ASSIGN, STAR, STAR_ASSIGN, LITERAL_ASSERT, TYPE_EXTENSION_AND, LITERAL_WHEN.
Parent is
com.puppycrawl.tools.checkstyle.TreeWalker
Violation Message Keys:
-
ws.notFollowed
-
ws.notPreceded
- Since:
- 3.0
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.puppycrawl.tools.checkstyle.AbstractAutomaticBean
AbstractAutomaticBean.OutputStreamOptions
-
-
Field Summary
Fields Modifier and Type Field Description private boolean
allowEmptyCatches
Allow empty catch bodies.private boolean
allowEmptyConstructors
Allow empty constructor bodies.private boolean
allowEmptyLambdas
Allow empty lambda bodies.private boolean
allowEmptyLoops
Allow empty loop bodies.private boolean
allowEmptyMethods
Allow empty method bodies.private boolean
allowEmptySwitchBlockStatements
Allow empty switch blocks and block statements.private boolean
allowEmptyTypes
Allow empty class, interface and enum bodies.private boolean
ignoreEnhancedForColon
Ignore whitespace around colon in enhanced for loop.static String
MSG_WS_NOT_FOLLOWED
A key is pointing to the warning message text in "messages.properties" file.static String
MSG_WS_NOT_PRECEDED
A key is pointing to the warning message text in "messages.properties" file.
-
Constructor Summary
Constructors Constructor Description WhitespaceAroundCheck()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description 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
isAnonymousInnerClassEnd(int currentType, char nextChar)
Check for "})" or "};" or "},".private boolean
isEmptyBlock(DetailAST ast, int parentType)
Is empty block.private static boolean
isEmptyBlock(DetailAST ast, int parentType, int match)
Tests if a givenDetailAST
is part of an empty block.private boolean
isEmptyCatch(DetailAST ast, int parentType)
Tests if the givenDetailAst
is part of an allowed empty catch block.private boolean
isEmptyCtorBlockCheckedFromRcurly(DetailAST ast)
Test if the givenDetailAST
is part of an allowed empty constructor (ctor) block checked from RCURLY.private boolean
isEmptyCtorBlockCheckedFromSlist(DetailAST ast)
Test if the givenDetailAST
is a part of an allowed empty constructor checked from SLIST token.private boolean
isEmptyLambda(DetailAST ast, int parentType)
Test if the givenDetailAST
is part of an allowed empty lambda block.private boolean
isEmptyLoop(DetailAST ast, int parentType)
Checks if loop is empty.private boolean
isEmptyMethodBlock(DetailAST ast, int parentType)
Test if the givenDetailAST
is part of an allowed empty method block.private boolean
isEmptySwitchBlockStatement(DetailAST ast)
Tests if the givenDetailAst
is part of an allowed empty switch case or default block.private static boolean
isEmptyType(DetailAST ast)
Test if the givenDetailAST
is part of an empty block.private boolean
isNotRelevantSituation(DetailAST ast, int currentType)
Is ast not a target of Check.private static boolean
isPartOfDoubleBraceInitializerForNextToken(DetailAST ast)
Check if given ast is part of double brace initializer and if it should omit checking if next token is separated by whitespace.private static boolean
isPartOfDoubleBraceInitializerForPreviousToken(DetailAST ast)
Check if given ast is part of double brace initializer and if it should omit checking if previous token is separated by whitespace.void
setAllowEmptyCatches(boolean allow)
Setter to allow empty catch bodies.void
setAllowEmptyConstructors(boolean allow)
Setter to allow empty constructor bodies.void
setAllowEmptyLambdas(boolean allow)
Setter to allow empty lambda bodies.void
setAllowEmptyLoops(boolean allow)
Setter to allow empty loop bodies.void
setAllowEmptyMethods(boolean allow)
Setter to allow empty method bodies.void
setAllowEmptySwitchBlockStatements(boolean allow)
Setter to allow empty switch blocks and block statements.void
setAllowEmptyTypes(boolean allow)
Setter to allow empty class, interface and enum bodies.void
setIgnoreEnhancedForColon(boolean ignore)
Setter to ignore whitespace around colon in enhanced for loop.private boolean
shouldCheckSeparationFromNextToken(DetailAST ast, char nextChar)
Check if it should be checked if next token is separated from current by whitespace.private static boolean
shouldCheckSeparationFromPreviousToken(DetailAST ast)
Check if it should be checked if previous token is separated from current by whitespace.void
visitToken(DetailAST ast)
Called to process a token.-
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractCheck
beginTree, clearViolations, destroy, finishTree, getFileContents, getFilePath, getLine, getLineCodePoints, getLines, getTabWidth, getTokenNames, getViolations, init, isCommentNodesRequired, leaveToken, log, log, log, setFileContents, setTabWidth, setTokens
-
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
finishLocalSetup, getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, setId, setSeverity
-
Methods inherited from class com.puppycrawl.tools.checkstyle.AbstractAutomaticBean
configure, contextualize, getConfiguration, setupChild
-
-
-
-
Field Detail
-
MSG_WS_NOT_PRECEDED
public static final String MSG_WS_NOT_PRECEDED
A key is pointing to the warning message text in "messages.properties" file.- See Also:
- Constant Field Values
-
MSG_WS_NOT_FOLLOWED
public static final String MSG_WS_NOT_FOLLOWED
A key is pointing to the warning message text in "messages.properties" file.- See Also:
- Constant Field Values
-
allowEmptyConstructors
private boolean allowEmptyConstructors
Allow empty constructor bodies.
-
allowEmptyMethods
private boolean allowEmptyMethods
Allow empty method bodies.
-
allowEmptyTypes
private boolean allowEmptyTypes
Allow empty class, interface and enum bodies.
-
allowEmptyLoops
private boolean allowEmptyLoops
Allow empty loop bodies.
-
allowEmptyLambdas
private boolean allowEmptyLambdas
Allow empty lambda bodies.
-
allowEmptyCatches
private boolean allowEmptyCatches
Allow empty catch bodies.
-
allowEmptySwitchBlockStatements
private boolean allowEmptySwitchBlockStatements
Allow empty switch blocks and block statements.
-
ignoreEnhancedForColon
private boolean ignoreEnhancedForColon
Ignore whitespace around colon in enhanced for loop.
-
-
Constructor Detail
-
WhitespaceAroundCheck
public WhitespaceAroundCheck()
-
-
Method Detail
-
getDefaultTokens
public int[] getDefaultTokens()
Description copied from class:AbstractCheck
Returns the default token a check is interested in. Only used if the configuration for a check does not define the tokens.- Specified by:
getDefaultTokens
in classAbstractCheck
- Returns:
- the default tokens
- See Also:
TokenTypes
-
getAcceptableTokens
public int[] getAcceptableTokens()
Description copied from class:AbstractCheck
The configurable token set. Used to protect Checks against malicious users who specify an unacceptable token set in the configuration file. The default implementation returns the check's default tokens.- Specified by:
getAcceptableTokens
in classAbstractCheck
- Returns:
- the token set this check is designed for.
- See Also:
TokenTypes
-
getRequiredTokens
public int[] getRequiredTokens()
Description copied from class:AbstractCheck
The tokens that this check must be registered for.- Specified by:
getRequiredTokens
in classAbstractCheck
- Returns:
- the token set this must be registered for.
- See Also:
TokenTypes
-
setAllowEmptyMethods
public void setAllowEmptyMethods(boolean allow)
Setter to allow empty method bodies.- Parameters:
allow
-true
to allow empty method bodies.- Since:
- 4.0
-
setAllowEmptyConstructors
public void setAllowEmptyConstructors(boolean allow)
Setter to allow empty constructor bodies.- Parameters:
allow
-true
to allow empty constructor bodies.- Since:
- 4.0
-
setIgnoreEnhancedForColon
public void setIgnoreEnhancedForColon(boolean ignore)
Setter to ignore whitespace around colon in enhanced for loop.- Parameters:
ignore
-true
to ignore enhanced for colon.- Since:
- 5.5
-
setAllowEmptyTypes
public void setAllowEmptyTypes(boolean allow)
Setter to allow empty class, interface and enum bodies.- Parameters:
allow
-true
to allow empty type bodies.- Since:
- 5.8
-
setAllowEmptyLoops
public void setAllowEmptyLoops(boolean allow)
Setter to allow empty loop bodies.- Parameters:
allow
-true
to allow empty loops bodies.- Since:
- 5.8
-
setAllowEmptyLambdas
public void setAllowEmptyLambdas(boolean allow)
Setter to allow empty lambda bodies.- Parameters:
allow
-true
to allow empty lambda expressions.- Since:
- 6.14
-
setAllowEmptyCatches
public void setAllowEmptyCatches(boolean allow)
Setter to allow empty catch bodies.- Parameters:
allow
-true
to allow empty catch blocks.- Since:
- 7.6
-
setAllowEmptySwitchBlockStatements
public void setAllowEmptySwitchBlockStatements(boolean allow)
Setter to allow empty switch blocks and block statements.- Parameters:
allow
-true
to allow empty switch case and default blocks.- Since:
- 10.19.0
-
visitToken
public void visitToken(DetailAST ast)
Description copied from class:AbstractCheck
Called to process a token.- Overrides:
visitToken
in classAbstractCheck
- Parameters:
ast
- the token to process
-
isNotRelevantSituation
private boolean isNotRelevantSituation(DetailAST ast, int currentType)
Is ast not a target of Check.- Parameters:
ast
- astcurrentType
- type of ast- Returns:
- true is ok to skip validation
-
shouldCheckSeparationFromPreviousToken
private static boolean shouldCheckSeparationFromPreviousToken(DetailAST ast)
Check if it should be checked if previous token is separated from current by whitespace. This function is needed to recognise double brace initialization as valid, unfortunately it's not possible to implement this functionality in isNotRelevantSituation method, because in this method when we return true(is not relevant) ast is later doesn't check at all. For example: new Properties() {{setProperty("double curly braces", "are not a style violation"); }}; For second left curly brace in first line when we would return true from isNotRelevantSituation it wouldn't later check that the next token(setProperty) is not separated from previous token.- Parameters:
ast
- current AST.- Returns:
- true if it should be checked if previous token is separated by whitespace, false otherwise.
-
shouldCheckSeparationFromNextToken
private boolean shouldCheckSeparationFromNextToken(DetailAST ast, char nextChar)
Check if it should be checked if next token is separated from current by whitespace. Explanation why this method is needed is identical to one included in shouldCheckSeparationFromPreviousToken method.- Parameters:
ast
- current AST.nextChar
- next character.- Returns:
- true if it should be checked if next token is separated by whitespace, false otherwise.
-
isAnonymousInnerClassEnd
private static boolean isAnonymousInnerClassEnd(int currentType, char nextChar)
Check for "})" or "};" or "},". Happens with anon-inners- Parameters:
currentType
- tokennextChar
- next symbol- Returns:
- true is that is end of anon inner class
-
isEmptyBlock
private boolean isEmptyBlock(DetailAST ast, int parentType)
Is empty block.- Parameters:
ast
- astparentType
- parent- Returns:
- true is block is empty
-
isEmptyBlock
private static boolean isEmptyBlock(DetailAST ast, int parentType, int match)
Tests if a givenDetailAST
is part of an empty block. An example empty block might look like the followingpublic void myMethod(int val) {}
In the above, the method body is an empty block ("{}").- Parameters:
ast
- theDetailAST
to test.parentType
- the token type ofast
's parent.match
- the parent token type we're looking to match.- Returns:
true
ifast
makes up part of an empty block contained under amatch
token type node.
-
isEmptyMethodBlock
private boolean isEmptyMethodBlock(DetailAST ast, int parentType)
Test if the givenDetailAST
is part of an allowed empty method block.- Parameters:
ast
- theDetailAST
to test.parentType
- the token type ofast
's parent.- Returns:
true
ifast
makes up part of an allowed empty method block.
-
isEmptyCtorBlockCheckedFromRcurly
private boolean isEmptyCtorBlockCheckedFromRcurly(DetailAST ast)
Test if the givenDetailAST
is part of an allowed empty constructor (ctor) block checked from RCURLY.- Parameters:
ast
- theDetailAST
to test.- Returns:
true
ifast
makes up part of an allowed empty constructor block.
-
isEmptyCtorBlockCheckedFromSlist
private boolean isEmptyCtorBlockCheckedFromSlist(DetailAST ast)
Test if the givenDetailAST
is a part of an allowed empty constructor checked from SLIST token.- Parameters:
ast
- theDetailAST
to test.- Returns:
true
ifast
makes up part of an empty constructor block.
-
isEmptyLoop
private boolean isEmptyLoop(DetailAST ast, int parentType)
Checks if loop is empty.- Parameters:
ast
- ast theDetailAST
to test.parentType
- the token type ofast
's parent.- Returns:
true
ifast
makes up part of an allowed empty loop block.
-
isEmptyLambda
private boolean isEmptyLambda(DetailAST ast, int parentType)
Test if the givenDetailAST
is part of an allowed empty lambda block.- Parameters:
ast
- theDetailAST
to test.parentType
- the token type ofast
's parent.- Returns:
true
ifast
makes up part of an allowed empty lambda block.
-
isEmptyCatch
private boolean isEmptyCatch(DetailAST ast, int parentType)
Tests if the givenDetailAst
is part of an allowed empty catch block.- Parameters:
ast
- theDetailAst
to test.parentType
- the token type ofast
's parent- Returns:
true
ifast
makes up part of an allowed empty catch block.
-
isEmptySwitchBlockStatement
private boolean isEmptySwitchBlockStatement(DetailAST ast)
Tests if the givenDetailAst
is part of an allowed empty switch case or default block.- Parameters:
ast
- theDetailAst
to test.- Returns:
true
ifast
makes up part of an allowed empty switch case or default block.
-
isEmptyType
private static boolean isEmptyType(DetailAST ast)
Test if the givenDetailAST
is part of an empty block. An example empty block might look like the followingclass Foo {}
- Parameters:
ast
- ast theDetailAST
to test.- Returns:
true
ifast
makes up part of an empty block contained under amatch
token type node.
-
isPartOfDoubleBraceInitializerForPreviousToken
private static boolean isPartOfDoubleBraceInitializerForPreviousToken(DetailAST ast)
Check if given ast is part of double brace initializer and if it should omit checking if previous token is separated by whitespace.- Parameters:
ast
- ast to check- Returns:
- true if it should omit checking for previous token, false otherwise
-
isPartOfDoubleBraceInitializerForNextToken
private static boolean isPartOfDoubleBraceInitializerForNextToken(DetailAST ast)
Check if given ast is part of double brace initializer and if it should omit checking if next token is separated by whitespace. See PR#2845 for more information why this function was needed.- Parameters:
ast
- ast to check- Returns:
- true if it should omit checking for next token, false otherwise
-
-