net.sourceforge.pmd.rules.design
Class ConfusingTernary

java.lang.Object
  extended by net.sourceforge.pmd.CommonAbstractRule
      extended by net.sourceforge.pmd.AbstractJavaRule
          extended by net.sourceforge.pmd.AbstractRule
              extended by net.sourceforge.pmd.rules.design.ConfusingTernary
All Implemented Interfaces:
JavaParserVisitor, Rule

public class ConfusingTernary
extends AbstractRule

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(); }
 


Field Summary
 
Fields inherited from interface net.sourceforge.pmd.Rule
LOWEST_PRIORITY, PRIORITIES
 
Constructor Summary
ConfusingTernary()
           
 
Method Summary
 java.lang.Object visit(ASTConditionalExpression node, java.lang.Object data)
           
 java.lang.Object visit(ASTIfStatement node, java.lang.Object data)
           
 
Methods inherited from class net.sourceforge.pmd.AbstractJavaRule
addViolation, addViolation, addViolation, addViolationWithMessage, apply, getDeclaringType, importsPackage, isQualifiedName, 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
 
Methods inherited from class net.sourceforge.pmd.CommonAbstractRule
addExample, addProperties, addProperty, addRuleChainVisit, asFixedMap, asFixedMap, end, equals, getBooleanProperties, getBooleanProperty, getBooleanProperty, getDescription, getDoubleProperties, getDoubleProperty, getDoubleProperty, getExample, getExamples, getExternalInfoUrl, getIntProperties, getIntProperty, getIntProperty, getMessage, getName, getPriority, getPriorityName, getProperties, getRuleChainVisits, getRuleClass, getRuleSetName, getSince, getStringProperties, getStringProperty, getStringProperty, getTypeProperties, getTypeProperty, hashCode, hasProperty, include, propertiesByName, propertyDescriptorFor, setDescription, setExternalInfoUrl, setInclude, setMessage, setName, setPriority, setProperties, setProperty, setRuleClass, setRuleSetName, setSince, setUsesDFA, setUsesTypeResolution, start, usesDFA, usesRuleChain, usesTypeResolution
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ConfusingTernary

public ConfusingTernary()
Method Detail

visit

public java.lang.Object visit(ASTIfStatement node,
                              java.lang.Object data)
Specified by:
visit in interface JavaParserVisitor
Overrides:
visit in class AbstractJavaRule

visit

public java.lang.Object visit(ASTConditionalExpression node,
                              java.lang.Object data)
Specified by:
visit in interface JavaParserVisitor
Overrides:
visit in class AbstractJavaRule


Copyright © 2002-2011 InfoEther. All Rights Reserved.