JavaParserVisitor
, net.sourceforge.pmd.lang.rule.ImmutableLanguage
, net.sourceforge.pmd.properties.PropertySource
, net.sourceforge.pmd.Rule
public class ConfusingTernaryRule extends AbstractJavaRule
if (x != y) { diff(); } else { same(); }
and(!x ? diff() : same());
XPath can handle the easy cases, e.g.:
//IfStatement[ Statement[2] and Expression[ EqualityExpression[@Image="!="] or UnaryExpressionNotPlusMinus[@Image="!"]]]
But "&&" and "||" are difficult, since we need a match for all children instead of just one. This can be done by using a double-negative, e.g.:
not(*[not(matchme)])
Still, XPath is unable to handle arbitrarily nested cases, since it lacks recursion, e.g.:
if (((x != !y)) || !(x)) { diff(); } else { same(); }
Constructor | Description |
---|---|
ConfusingTernaryRule() |
Modifier and Type | Method | Description |
---|---|---|
java.lang.Object |
visit(ASTConditionalExpression node,
java.lang.Object data) |
|
java.lang.Object |
visit(ASTIfStatement node,
java.lang.Object data) |
apply, getDeclaringType, importsPackage, isQualifiedName, isSuppressed, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visitAll
copyPropertyDescriptors, copyPropertyValues, definePropertyDescriptor, dysfunctionReason, getPropertiesByPropertyDescriptor, getProperty, getPropertyDescriptor, getPropertyDescriptors, hasDescriptor, ignoredProperties, setProperty, setProperty, useDefaultValueFor, usesDefaultValues
addExample, addRuleChainVisit, addRuleChainVisit, addViolation, addViolation, addViolation, addViolationWithMessage, addViolationWithMessage, addViolationWithMessage, deepCopy, deepCopyValuesTo, end, equals, getDescription, getExamples, getExternalInfoUrl, getLanguage, getMaximumLanguageVersion, getMessage, getMinimumLanguageVersion, getName, getParserOptions, getPriority, getRuleChainVisits, getRuleClass, getRuleSetName, getSince, hashCode, isDeprecated, isDfa, isMultifile, isRuleChain, isTypeResolution, setDeprecated, setDescription, setDfa, setExternalInfoUrl, setLanguage, setMaximumLanguageVersion, setMessage, setMinimumLanguageVersion, setMultifile, setName, setPriority, setRuleClass, setRuleSetName, setSince, setTypeResolution, setUsesDFA, setUsesMultifile, setUsesTypeResolution, start, usesDFA, usesMultifile, usesRuleChain, usesTypeResolution
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
definePropertyDescriptor, dysfunctionReason, getPropertiesByPropertyDescriptor, getProperty, getPropertyDescriptor, getPropertyDescriptors, hasDescriptor, ignoredProperties, setProperty, setProperty, useDefaultValueFor, usesDefaultValues
public java.lang.Object visit(ASTIfStatement node, java.lang.Object data)
visit
in interface JavaParserVisitor
visit
in class AbstractJavaRule
public java.lang.Object visit(ASTConditionalExpression node, java.lang.Object data)
visit
in interface JavaParserVisitor
visit
in class AbstractJavaRule
Copyright © 2002–2018 PMD. All rights reserved.