Class WhitespaceAroundCheck
- All Implemented Interfaces:
Configurable
,Contextualizable
public 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
and allowEmptySwitchBlockStatements
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
FieldsModifier and TypeFieldDescriptionprivate boolean
Allow empty catch bodies.private boolean
Allow empty constructor bodies.private boolean
Allow empty lambda bodies.private boolean
Allow empty loop bodies.private boolean
Allow empty method bodies.private boolean
Allow empty switch blocks and block statements.private boolean
Allow empty class, interface and enum bodies.private boolean
Ignore whitespace around colon in enhanced for loop.static final String
A key is pointing to the warning message text in "messages.properties" file.static final String
A key is pointing to the warning message text in "messages.properties" file. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionint[]
The configurable token set.int[]
Returns the default token a check is interested in.int[]
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
Test if the givenDetailAST
is part of an allowed empty constructor (ctor) block checked from RCURLY.private boolean
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
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
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
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
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 Details
-
MSG_WS_NOT_PRECEDED
A key is pointing to the warning message text in "messages.properties" file.- See Also:
-
MSG_WS_NOT_FOLLOWED
A key is pointing to the warning message text in "messages.properties" file.- See Also:
-
allowEmptyConstructors
Allow empty constructor bodies. -
allowEmptyMethods
Allow empty method bodies. -
allowEmptyTypes
Allow empty class, interface and enum bodies. -
allowEmptyLoops
Allow empty loop bodies. -
allowEmptyLambdas
Allow empty lambda bodies. -
allowEmptyCatches
Allow empty catch bodies. -
allowEmptySwitchBlockStatements
Allow empty switch blocks and block statements. -
ignoreEnhancedForColon
Ignore whitespace around colon in enhanced for loop.
-
-
Constructor Details
-
WhitespaceAroundCheck
public WhitespaceAroundCheck()
-
-
Method Details
-
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:
-
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:
-
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:
-
setAllowEmptyMethods
Setter to allow empty method bodies.- Parameters:
allow
-true
to allow empty method bodies.- Since:
- 4.0
-
setAllowEmptyConstructors
Setter to allow empty constructor bodies.- Parameters:
allow
-true
to allow empty constructor bodies.- Since:
- 4.0
-
setIgnoreEnhancedForColon
Setter to ignore whitespace around colon in enhanced for loop.- Parameters:
ignore
-true
to ignore enhanced for colon.- Since:
- 5.5
-
setAllowEmptyTypes
Setter to allow empty class, interface and enum bodies.- Parameters:
allow
-true
to allow empty type bodies.- Since:
- 5.8
-
setAllowEmptyLoops
Setter to allow empty loop bodies.- Parameters:
allow
-true
to allow empty loops bodies.- Since:
- 5.8
-
setAllowEmptyLambdas
Setter to allow empty lambda bodies.- Parameters:
allow
-true
to allow empty lambda expressions.- Since:
- 6.14
-
setAllowEmptyCatches
Setter to allow empty catch bodies.- Parameters:
allow
-true
to allow empty catch blocks.- Since:
- 7.6
-
setAllowEmptySwitchBlockStatements
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
Description copied from class:AbstractCheck
Called to process a token.- Overrides:
visitToken
in classAbstractCheck
- Parameters:
ast
- the token to process
-
isNotRelevantSituation
Is ast not a target of Check.- Parameters:
ast
- astcurrentType
- type of ast- Returns:
- true is ok to skip validation
-
shouldCheckSeparationFromPreviousToken
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
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
Check for "})" or "};" or "},". Happens with anon-inners- Parameters:
currentType
- tokennextChar
- next symbol- Returns:
- true is that is end of anon inner class
-
isEmptyBlock
Is empty block.- Parameters:
ast
- astparentType
- parent- Returns:
- true is block is empty
-
isEmptyBlock
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
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
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
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
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
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
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
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
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
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
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
-