org.acm.seguin.pmd.rules
Class ConstructorCallsOverridableMethodRule

java.lang.Object
  extended by net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
      extended by org.acm.seguin.pmd.AbstractRule
          extended by org.acm.seguin.pmd.rules.ConstructorCallsOverridableMethodRule
All Implemented Interfaces:
net.sourceforge.jrefactory.parser.JavaParserVisitor, Rule

public final class ConstructorCallsOverridableMethodRule
extends AbstractRule

Searches through all methods and constructors called from constructors. It marks as dangerous any call to overridable methods from non-private constructors. It marks as dangerous any calls to dangerous private constructors from non-private constructors.

Author:
CL Gilbert (dnoyeb@users.sourceforge.net)

Field Summary
 
Fields inherited from interface org.acm.seguin.pmd.Rule
LOWEST_PRIORITY, PRIORITIES
 
Constructor Summary
ConstructorCallsOverridableMethodRule()
           
 
Method Summary
 java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTClassDeclaration node, java.lang.Object data)
          This check must be evaluated independelty for each class.
 java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTCompilationUnit node, java.lang.Object data)
          Work on each file independently.
 java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTConstructorDeclaration node, java.lang.Object data)
          Non-private constructor's methods are added to a list for later safety evaluation.
 java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTInterfaceDeclaration node, java.lang.Object data)
          Description of the Method
 java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTMethodDeclarator node, java.lang.Object data)
          Create a MethodHolder to hold the method.
 java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTNestedClassDeclaration node, java.lang.Object data)
          Description of the Method
 java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTNestedInterfaceDeclaration node, java.lang.Object data)
          Description of the Method
 
Methods inherited from class org.acm.seguin.pmd.AbstractRule
addProperty, apply, createRuleViolation, createRuleViolation, equals, getBooleanProperty, getDescription, getDoubleProperty, getExample, getIntProperty, getMessage, getName, getPriority, getPriorityName, getProperties, getStringProperty, hashCode, hasProperty, include, setDescription, setExample, setInclude, setMessage, setName, setPriority, visitAll
 
Methods inherited from class net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
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
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ConstructorCallsOverridableMethodRule

public ConstructorCallsOverridableMethodRule()
Method Detail

visit

public java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTCompilationUnit node,
                              java.lang.Object data)
Work on each file independently.

Specified by:
visit in interface net.sourceforge.jrefactory.parser.JavaParserVisitor
Overrides:
visit in class AbstractRule
Parameters:
node - Description of Parameter
data - Description of Parameter
Returns:
Description of the Returned Value

visit

public java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTClassDeclaration node,
                              java.lang.Object data)
This check must be evaluated independelty for each class. Inner classses get their own EvalPackage in order to perform independent evaluation.

Specified by:
visit in interface net.sourceforge.jrefactory.parser.JavaParserVisitor
Overrides:
visit in class net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
Parameters:
node - Description of Parameter
data - Description of Parameter
Returns:
Description of the Returned Value

visit

public java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTNestedClassDeclaration node,
                              java.lang.Object data)
Description of the Method

Specified by:
visit in interface net.sourceforge.jrefactory.parser.JavaParserVisitor
Overrides:
visit in class net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
Parameters:
node - Description of Parameter
data - Description of Parameter
Returns:
Description of the Returned Value

visit

public java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTInterfaceDeclaration node,
                              java.lang.Object data)
Description of the Method

Specified by:
visit in interface net.sourceforge.jrefactory.parser.JavaParserVisitor
Overrides:
visit in class net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
Parameters:
node - Description of Parameter
data - Description of Parameter
Returns:
Description of the Returned Value

visit

public java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTNestedInterfaceDeclaration node,
                              java.lang.Object data)
Description of the Method

Specified by:
visit in interface net.sourceforge.jrefactory.parser.JavaParserVisitor
Overrides:
visit in class net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
Parameters:
node - Description of Parameter
data - Description of Parameter
Returns:
Description of the Returned Value

visit

public java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTConstructorDeclaration node,
                              java.lang.Object data)
Non-private constructor's methods are added to a list for later safety evaluation. Non-private constructor's calls on private constructors are added to a list for later safety evaluation. Private constructors are added to a list so their safety to be called can be later evaluated. Note: We are not checking private constructor's calls on non-private constructors because all non-private constructors will be evaluated for safety anyway. This means we wont flag a private constructor as unsafe just because it calls an unsafe public constructor. We want to show only 1 instance of an error, and this would be 2 instances of the same error.

Specified by:
visit in interface net.sourceforge.jrefactory.parser.JavaParserVisitor
Overrides:
visit in class net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
Parameters:
node - Description of Parameter
data - Description of Parameter
Returns:
Description of the Returned Value

visit

public java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTMethodDeclarator node,
                              java.lang.Object data)
Create a MethodHolder to hold the method. Store the MethodHolder in the Map as the key Store each method called by the current method as a List in the Map as the Object

Specified by:
visit in interface net.sourceforge.jrefactory.parser.JavaParserVisitor
Overrides:
visit in class net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
Parameters:
node - Description of Parameter
data - Description of Parameter
Returns:
Description of the Returned Value