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
Checks that a token is surrounded by whitespace. Empty constructor,
method, class, enum, interface, loop bodies (blocks), lambdas of the form
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.
- Since:
- 3.0
-
Nested Class Summary
Nested classes/interfaces inherited from class com.puppycrawl.tools.checkstyle.AbstractAutomaticBean
AbstractAutomaticBean.OutputStreamOptions -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate booleanAllow empty catch bodies.private booleanAllow empty constructor bodies.private booleanAllow empty lambda bodies.private booleanAllow empty loop bodies.private booleanAllow empty method bodies.private booleanAllow empty switch blocks and block statements.private booleanAllow empty class, interface and enum bodies.private booleanIgnore whitespace around colon in enhanced for loop.static final StringA key is pointing to the warning message text in "messages.properties" file.static final StringA 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 booleanisAnonymousInnerClassEnd(int currentType, char nextChar) Check for "})" or "};" or "},".private booleanisEmptyBlock(DetailAST ast, int parentType) Is empty block.private static booleanisEmptyBlock(DetailAST ast, int parentType, int match) Tests if a givenDetailASTis part of an empty block.private booleanisEmptyCatch(DetailAST ast, int parentType) Tests if the givenDetailAstis part of an allowed empty catch block.private booleanTest if the givenDetailASTis part of an allowed empty constructor (ctor) block checked from RCURLY.private booleanTest if the givenDetailASTis a part of an allowed empty constructor checked from SLIST token.private booleanisEmptyLambda(DetailAST ast, int parentType) Test if the givenDetailASTis part of an allowed empty lambda block.private booleanisEmptyLoop(DetailAST ast, int parentType) Checks if loop is empty.private booleanisEmptyMethodBlock(DetailAST ast, int parentType) Test if the givenDetailASTis part of an allowed empty method block.private booleanTests if the givenDetailAstis part of an allowed empty switch case or default block.private static booleanisEmptyType(DetailAST ast) Test if the givenDetailASTis part of an empty block.private booleanisNotRelevantSituation(DetailAST ast, int currentType) Is ast not a target of Check.private static booleanCheck if given ast is part of double brace initializer and if it should omit checking if next token is separated by whitespace.private static booleanCheck if given ast is part of double brace initializer and if it should omit checking if previous token is separated by whitespace.voidsetAllowEmptyCatches(boolean allow) Setter to allow empty catch bodies.voidsetAllowEmptyConstructors(boolean allow) Setter to allow empty constructor bodies.voidsetAllowEmptyLambdas(boolean allow) Setter to allow empty lambda bodies.voidsetAllowEmptyLoops(boolean allow) Setter to allow empty loop bodies.voidsetAllowEmptyMethods(boolean allow) Setter to allow empty method bodies.voidsetAllowEmptySwitchBlockStatements(boolean allow) Setter to allow empty switch blocks and block statements.voidsetAllowEmptyTypes(boolean allow) Setter to allow empty class, interface and enum bodies.voidsetIgnoreEnhancedForColon(boolean ignore) Setter to ignore whitespace around colon in enhanced for loop.private booleanshouldCheckSeparationFromNextToken(DetailAST ast, char nextChar) Check if it should be checked if next token is separated from current by whitespace.private static booleanCheck if it should be checked if previous token is separated from current by whitespace.voidvisitToken(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, setTokensMethods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
finishLocalSetup, getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, setId, setSeverityMethods 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:AbstractCheckReturns the default token a check is interested in. Only used if the configuration for a check does not define the tokens.- Specified by:
getDefaultTokensin classAbstractCheck- Returns:
- the default tokens
- See Also:
-
getAcceptableTokens
Description copied from class:AbstractCheckThe 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:
getAcceptableTokensin classAbstractCheck- Returns:
- the token set this check is designed for.
- See Also:
-
getRequiredTokens
Description copied from class:AbstractCheckThe tokens that this check must be registered for.- Specified by:
getRequiredTokensin classAbstractCheck- Returns:
- the token set this must be registered for.
- See Also:
-
setAllowEmptyMethods
Setter to allow empty method bodies.- Parameters:
allow-trueto allow empty method bodies.- Since:
- 4.0
-
setAllowEmptyConstructors
Setter to allow empty constructor bodies.- Parameters:
allow-trueto allow empty constructor bodies.- Since:
- 4.0
-
setIgnoreEnhancedForColon
Setter to ignore whitespace around colon in enhanced for loop.- Parameters:
ignore-trueto ignore enhanced for colon.- Since:
- 5.5
-
setAllowEmptyTypes
Setter to allow empty class, interface and enum bodies.- Parameters:
allow-trueto allow empty type bodies.- Since:
- 5.8
-
setAllowEmptyLoops
Setter to allow empty loop bodies.- Parameters:
allow-trueto allow empty loops bodies.- Since:
- 5.8
-
setAllowEmptyLambdas
Setter to allow empty lambda bodies.- Parameters:
allow-trueto allow empty lambda expressions.- Since:
- 6.14
-
setAllowEmptyCatches
Setter to allow empty catch bodies.- Parameters:
allow-trueto allow empty catch blocks.- Since:
- 7.6
-
setAllowEmptySwitchBlockStatements
Setter to allow empty switch blocks and block statements.- Parameters:
allow-trueto allow empty switch case and default blocks.- Since:
- 10.19.0
-
visitToken
Description copied from class:AbstractCheckCalled to process a token.- Overrides:
visitTokenin 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 givenDetailASTis 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- theDetailASTto test.parentType- the token type ofast's parent.match- the parent token type we're looking to match.- Returns:
trueifastmakes up part of an empty block contained under amatchtoken type node.
-
isEmptyMethodBlock
Test if the givenDetailASTis part of an allowed empty method block.- Parameters:
ast- theDetailASTto test.parentType- the token type ofast's parent.- Returns:
trueifastmakes up part of an allowed empty method block.
-
isEmptyCtorBlockCheckedFromRcurly
Test if the givenDetailASTis part of an allowed empty constructor (ctor) block checked from RCURLY.- Parameters:
ast- theDetailASTto test.- Returns:
trueifastmakes up part of an allowed empty constructor block.
-
isEmptyCtorBlockCheckedFromSlist
Test if the givenDetailASTis a part of an allowed empty constructor checked from SLIST token.- Parameters:
ast- theDetailASTto test.- Returns:
trueifastmakes up part of an empty constructor block.
-
isEmptyLoop
Checks if loop is empty.- Parameters:
ast- ast theDetailASTto test.parentType- the token type ofast's parent.- Returns:
trueifastmakes up part of an allowed empty loop block.
-
isEmptyLambda
Test if the givenDetailASTis part of an allowed empty lambda block.- Parameters:
ast- theDetailASTto test.parentType- the token type ofast's parent.- Returns:
trueifastmakes up part of an allowed empty lambda block.
-
isEmptyCatch
Tests if the givenDetailAstis part of an allowed empty catch block.- Parameters:
ast- theDetailAstto test.parentType- the token type ofast's parent- Returns:
trueifastmakes up part of an allowed empty catch block.
-
isEmptySwitchBlockStatement
Tests if the givenDetailAstis part of an allowed empty switch case or default block.- Parameters:
ast- theDetailAstto test.- Returns:
trueifastmakes up part of an allowed empty switch case or default block.
-
isEmptyType
Test if the givenDetailASTis part of an empty block. An example empty block might look like the followingclass Foo {}- Parameters:
ast- ast theDetailASTto test.- Returns:
trueifastmakes up part of an empty block contained under amatchtoken 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
-