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, setTokensfinishLocalSetup, getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, setId, setSeverityconfigure, contextualize, getConfiguration, setupChildpublic static final String MSG_KEY
public BooleanExpressionComplexityCheck()
public int[] getDefaultTokens()
AbstractCheckgetDefaultTokens in class AbstractCheckTokenTypespublic int[] getRequiredTokens()
AbstractCheckgetRequiredTokens in class AbstractCheckTokenTypespublic int[] getAcceptableTokens()
AbstractCheckgetAcceptableTokens in class AbstractCheckTokenTypespublic void setMax(int max)
max - new maximum allowed complexity.public void visitToken(DetailAST ast)
AbstractCheckvisitToken in class AbstractCheckast - the token to processpublic void leaveToken(DetailAST ast)
AbstractCheckleaveToken in class AbstractCheckast - the token leavingCopyright © 2001–2020. All rights reserved.