public final class BooleanExpressionComplexityCheck extends AbstractCheck
Restricts the number of boolean operators (&&
, ||
,
&
, |
and ^
) in an expression.
Rationale: Too many conditions leads to code that is difficult to read and hence debug and maintain.
Note that the operators &
and |
are not only integer bitwise
operators, they are also the
non-shortcut versions of the boolean operators &&
and ||
.
Note that &
, |
and ^
are not checked if they are part
of constructor or method call because they can be applied to non boolean
variables and Checkstyle does not know types of methods from different classes.
max
- Specify the maximum number of boolean operations
allowed in one expression.
Type is int
.
Default value is 3
.
tokens
- tokens to check
Type is int[]
.
Default value is:
LAND,
BAND,
LOR,
BOR,
BXOR.
To configure the check:
<module name="BooleanExpressionComplexity"/>
Code Example:
public class Test { public static void main(String ... args) { boolean a = true; boolean b = false; boolean c = (a & b) | (b ^ a); // OK, 1(&) + 1(|) + 1(^) = 3 (max allowed 3) boolean d = (a & b) ^ (a || b) | a; // violation, 1(&) + 1(^) + 1(||) + 1(|) = 4 } }
To configure the check with 5 allowed operation in boolean expression:
<module name="BooleanExpressionComplexity"> <property name="max" value="5"/> </module>
Code Example:
public class Test { public static void main(String ... args) { boolean a = true; boolean b = false; boolean c = (a & b) | (b ^ a) | (a ^ b); // OK, 1(&) + 1(|) + 1(^) + 1(|) + 1(^) = 5 boolean d = (a | b) ^ (a | b) ^ (a || b) & b; // violation, // 1(|) + 1(^) + 1(|) + 1(^) + 1(||) + 1(&) = 6 } }
To configure the check to ignore &
and |
:
<module name="BooleanExpressionComplexity"> <property name="tokens" value="BXOR,LAND,LOR"/> </module>
Code Example:
public class Test { public static void main(String ... args) { boolean a = true; boolean b = false; boolean c = (!a && b) | (a || !b) ^ a; // OK, 1(&&) + 1(||) + 1(^) = 3 // | is ignored here boolean d = a ^ (a || b) ^ (b || a) & a; // violation, 1(^) + 1(||) + 1(^) + 1(||) = 4 // & is ignored here } }
Parent is com.puppycrawl.tools.checkstyle.TreeWalker
Violation Message Keys:
booleanExpressionComplexity
AutomaticBean.OutputStreamOptions
Modifier and Type | Field and Description |
---|---|
static String |
MSG_KEY
A key is pointing to the warning message text in "messages.properties"
file.
|
Constructor and Description |
---|
BooleanExpressionComplexityCheck()
Creates new instance of the check.
|
Modifier and Type | Method and 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.
|
void |
leaveToken(DetailAST ast)
Called after all the child nodes have been process.
|
void |
setMax(int max)
Setter to specify the maximum number of boolean operations allowed in one expression.
|
void |
visitToken(DetailAST ast)
Called to process a token.
|
beginTree, clearMessages, destroy, finishTree, getFileContents, getLine, getLines, getMessages, getTabWidth, getTokenNames, init, isCommentNodesRequired, log, log, log, setFileContents, setTabWidth, setTokens
finishLocalSetup, getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, setId, setSeverity
configure, contextualize, getConfiguration, setupChild
public static final String MSG_KEY
public BooleanExpressionComplexityCheck()
public int[] getDefaultTokens()
AbstractCheck
getDefaultTokens
in class AbstractCheck
TokenTypes
public int[] getRequiredTokens()
AbstractCheck
getRequiredTokens
in class AbstractCheck
TokenTypes
public int[] getAcceptableTokens()
AbstractCheck
getAcceptableTokens
in class AbstractCheck
TokenTypes
public void setMax(int max)
max
- new maximum allowed complexity.public void visitToken(DetailAST ast)
AbstractCheck
visitToken
in class AbstractCheck
ast
- the token to processpublic void leaveToken(DetailAST ast)
AbstractCheck
leaveToken
in class AbstractCheck
ast
- the token leavingCopyright © 2001–2020. All rights reserved.