Class OperatorWrapCheck
- java.lang.Object
-
- com.puppycrawl.tools.checkstyle.api.AutomaticBean
-
- com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
-
- com.puppycrawl.tools.checkstyle.api.AbstractCheck
-
- com.puppycrawl.tools.checkstyle.checks.whitespace.OperatorWrapCheck
-
- All Implemented Interfaces:
Configurable,Contextualizable
public class OperatorWrapCheck extends AbstractCheck
Checks the policy on how to wrap lines on operators.
-
Property
option- Specify policy on how to wrap lines. Type iscom.puppycrawl.tools.checkstyle.checks.whitespace.WrapOption. Default value isnl. -
Property
tokens- tokens to check Type isjava.lang.String[]. Validation type istokenSet. Default value is: QUESTION, COLON, EQUAL, NOT_EQUAL, DIV, PLUS, MINUS, STAR, MOD, SR, BSR, GE, GT, SL, LE, LT, BXOR, BOR, LOR, BAND, LAND, TYPE_EXTENSION_AND, LITERAL_INSTANCEOF.
To configure the check:
<module name="OperatorWrap"/>
Example:
class Test { public static void main(String[] args) { String s = "Hello" + "World"; // violation, '+' should be on new line if (10 == 20) { // violation, '==' should be on new line. // body } if (10 == 20) { // ok // body } int c = 10 / 5; // violation, '/' should be on new line. int d = c + 10; // ok } }To configure the check for assignment operators at the end of a line:
<module name="OperatorWrap"> <property name="tokens" value="ASSIGN,DIV_ASSIGN,PLUS_ASSIGN,MINUS_ASSIGN,STAR_ASSIGN,MOD_ASSIGN, SR_ASSIGN,BSR_ASSIGN,SL_ASSIGN,BXOR_ASSIGN,BOR_ASSIGN,BAND_ASSIGN"/> <property name="option" value="eol"/> </module>Example:
class Test { public static void main(String[] args) { int b = 10; // violation, '=' should be on previous line int c = 10; // ok b += 10; // violation, '+=' should be on previous line b += 10; // ok c *= 10; // violation, '*=' should be on previous line c *= 10; // ok c -= 5; // violation, '-=' should be on previous line c -= 5; // ok c /= 2; // violation, '/=' should be on previous line c %= 1; // violation, '%=' should be on previous line c >>= 1; // violation, '>>=' should be on previous line c >>>= 1; // violation, '>>>=' should be on previous line } public void myFunction() { c ^= 1; // violation, '^=' should be on previous line c |= 1; // violation, '|=' should be on previous line c &=1 ; // violation, '&=' should be on previous line c <<= 1; // violation, '<<=' should be on previous line } }Parent is
com.puppycrawl.tools.checkstyle.TreeWalkerViolation Message Keys:
-
line.new -
line.previous
- Since:
- 3.0
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.puppycrawl.tools.checkstyle.api.AutomaticBean
AutomaticBean.OutputStreamOptions
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringMSG_LINE_NEWA key is pointing to the warning message text in "messages.properties" file.static java.lang.StringMSG_LINE_PREVIOUSA key is pointing to the warning message text in "messages.properties" file.private WrapOptionoptionSpecify policy on how to wrap lines.
-
Constructor Summary
Constructors Constructor Description OperatorWrapCheck()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static DetailASTadjustParens(DetailAST node, java.util.function.UnaryOperator<DetailAST> step)Finds matching parentheses among siblings.int[]getAcceptableTokens()The configurable token set.int[]getDefaultTokens()Returns the default token a check is interested in.private static DetailASTgetLeftNode(DetailAST node)Returns the left neighbour of a binary operator.int[]getRequiredTokens()The tokens that this check must be registered for.private static DetailASTgetRightNode(DetailAST node)Returns the right neighbour of a binary operator.private static booleanisAssignToVariable(DetailAST node)Checks if a node isTokenTypes.ASSIGNto a variable or resource.private static booleanisColonFromLabel(DetailAST node)Checks if a node isTokenTypes.COLONfrom a label, switch case of default.private static booleanisEndOfLineModeViolation(DetailAST ast)Checks whether operator violatesWrapOption.EOLmode.private static booleanisInPatternDefinition(DetailAST node)Ascends AST to determine if given node is part of a pattern definition.private static booleanisNewLineModeViolation(DetailAST ast)Checks whether operator violatesWrapOption.NLmode.private static booleanisTargetNode(DetailAST node)Filters some false tokens that this check should ignore.voidsetOption(java.lang.String optionStr)Setter to specify policy on how to wrap lines.voidvisitToken(DetailAST ast)Called to process a token.-
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractCheck
beginTree, clearViolations, destroy, finishTree, getFileContents, 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.api.AutomaticBean
configure, contextualize, getConfiguration, setupChild
-
-
-
-
Field Detail
-
MSG_LINE_NEW
public static final java.lang.String MSG_LINE_NEW
A key is pointing to the warning message text in "messages.properties" file.- See Also:
- Constant Field Values
-
MSG_LINE_PREVIOUS
public static final java.lang.String MSG_LINE_PREVIOUS
A key is pointing to the warning message text in "messages.properties" file.- See Also:
- Constant Field Values
-
option
private WrapOption option
Specify policy on how to wrap lines.
-
-
Constructor Detail
-
OperatorWrapCheck
public OperatorWrapCheck()
-
-
Method Detail
-
setOption
public void setOption(java.lang.String optionStr)
Setter to specify policy on how to wrap lines.- Parameters:
optionStr- string to decode option from- Throws:
java.lang.IllegalArgumentException- if unable to decode
-
getDefaultTokens
public int[] 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:
TokenTypes
-
getAcceptableTokens
public int[] 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:
TokenTypes
-
getRequiredTokens
public int[] 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:
TokenTypes
-
visitToken
public void visitToken(DetailAST ast)
Description copied from class:AbstractCheckCalled to process a token.- Overrides:
visitTokenin classAbstractCheck- Parameters:
ast- the token to process
-
isTargetNode
private static boolean isTargetNode(DetailAST node)
Filters some false tokens that this check should ignore.- Parameters:
node- the node to check- Returns:
truefor all nodes this check should validate
-
isNewLineModeViolation
private static boolean isNewLineModeViolation(DetailAST ast)
Checks whether operator violatesWrapOption.NLmode.- Parameters:
ast- the DetailAst of an operator- Returns:
trueif mode does not match
-
isEndOfLineModeViolation
private static boolean isEndOfLineModeViolation(DetailAST ast)
Checks whether operator violatesWrapOption.EOLmode.- Parameters:
ast- the DetailAst of an operator- Returns:
trueif mode does not match
-
isColonFromLabel
private static boolean isColonFromLabel(DetailAST node)
Checks if a node isTokenTypes.COLONfrom a label, switch case of default.- Parameters:
node- the node to check- Returns:
trueif node matches
-
isAssignToVariable
private static boolean isAssignToVariable(DetailAST node)
Checks if a node isTokenTypes.ASSIGNto a variable or resource.- Parameters:
node- the node to check- Returns:
trueif node matches
-
getLeftNode
private static DetailAST getLeftNode(DetailAST node)
Returns the left neighbour of a binary operator. This is the rightmost grandchild of the left child or sibling. For the assign operator the return value is the variable name.- Parameters:
node- the binary operator- Returns:
- nearest node from left
-
isInPatternDefinition
private static boolean isInPatternDefinition(DetailAST node)
Ascends AST to determine if given node is part of a pattern definition.- Parameters:
node- the node to check- Returns:
- true if node is in pattern definition
-
getRightNode
private static DetailAST getRightNode(DetailAST node)
Returns the right neighbour of a binary operator. This is the leftmost grandchild of the right child or sibling. For the ternary operator this is the node between?and:.- Parameters:
node- the binary operator- Returns:
- nearest node from right
-
adjustParens
private static DetailAST adjustParens(DetailAST node, java.util.function.UnaryOperator<DetailAST> step)
Finds matching parentheses among siblings. If the given node is notTokenTypes.LPARENnorTokenTypes.RPAREN, the method adjusts nothing. This method is for handling case like(condition && (condition || condition2 || condition3) && condition4 && condition3)- Parameters:
node- the node to adjuststep- the node transformer, should beDetailAST.getPreviousSibling()orDetailAST.getNextSibling()- Returns:
- adjusted node
-
-