net.sourceforge.pmd.rules.design
Class NpathComplexity

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

public class NpathComplexity
extends StatisticalRule

NPath complexity is a measurement of the acyclic execution paths through a function. See Nejmeh, Communications of the ACM Feb 1988 pp 188-200.

Author:
Jason Bennett

Field Summary
 
Fields inherited from class net.sourceforge.pmd.stat.StatisticalRule
DELTA
 
Fields inherited from interface net.sourceforge.pmd.Rule
LOWEST_PRIORITY, PRIORITIES
 
Constructor Summary
NpathComplexity()
           
 
Method Summary
protected  void makeViolations(RuleContext ctx, java.util.Set<DataPoint> p)
           
static int sumExpressionComplexity(ASTExpression expr)
          Calculate the boolean complexity of the given expression.
 java.lang.Object visit(ASTConditionalExpression node, java.lang.Object data)
           
 java.lang.Object visit(ASTDoStatement node, java.lang.Object data)
           
 java.lang.Object visit(ASTForStatement node, java.lang.Object data)
           
 java.lang.Object visit(ASTIfStatement node, java.lang.Object data)
           
 java.lang.Object visit(ASTMethodDeclaration node, java.lang.Object data)
           
 java.lang.Object visit(ASTReturnStatement node, java.lang.Object data)
           
 java.lang.Object visit(ASTSwitchStatement node, java.lang.Object data)
           
 java.lang.Object visit(ASTTryStatement node, java.lang.Object data)
           
 java.lang.Object visit(ASTWhileStatement node, java.lang.Object data)
           
 java.lang.Object visit(SimpleJavaNode node, java.lang.Object data)
           
 
Methods inherited from class net.sourceforge.pmd.stat.StatisticalRule
addDataPoint, apply, applyMinimumValue, applyTopScore, getMean, getStdDev, propertiesByName
 
Methods inherited from class net.sourceforge.pmd.AbstractJavaRule
addViolation, addViolation, addViolation, addViolationWithMessage, 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, 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, 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

NpathComplexity

public NpathComplexity()
Method Detail

visit

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

visit

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

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(ASTWhileStatement node,
                              java.lang.Object data)
Specified by:
visit in interface JavaParserVisitor
Overrides:
visit in class AbstractJavaRule

visit

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

visit

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

visit

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

visit

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

visit

public java.lang.Object visit(ASTTryStatement 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

sumExpressionComplexity

public static int sumExpressionComplexity(ASTExpression expr)
Calculate the boolean complexity of the given expression. NPath boolean complexity is the sum of && and || tokens. This is calculated by summing the number of children of the &&'s (minus one) and the children of the ||'s (minus one).

Note that this calculation applies to Cyclomatic Complexity as well.

Parameters:
expr - control structure expression
Returns:
complexity of the boolean expression

makeViolations

protected void makeViolations(RuleContext ctx,
                              java.util.Set<DataPoint> p)
Overrides:
makeViolations in class StatisticalRule


Copyright © 2002-2011 InfoEther. All Rights Reserved.