net.sourceforge.pmd.rules
Class ConstructorCallsOverridableMethodRule

java.lang.Object
  extended bynet.sourceforge.pmd.ast.JavaParserVisitorAdapter
      extended bynet.sourceforge.pmd.AbstractRule
          extended bynet.sourceforge.pmd.rules.ConstructorCallsOverridableMethodRule
All Implemented Interfaces:
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 net.sourceforge.pmd.Rule
LOWEST_PRIORITY, PRIORITIES
 
Constructor Summary
ConstructorCallsOverridableMethodRule()
           
 
Method Summary
 java.lang.Object visit(ASTClassDeclaration node, java.lang.Object data)
          This check must be evaluated independelty for each class.
 java.lang.Object visit(ASTCompilationUnit node, java.lang.Object data)
          Work on each file independently.
 java.lang.Object visit(ASTConstructorDeclaration node, java.lang.Object data)
          Non-private constructor's methods are added to a list for later safety evaluation.
 java.lang.Object visit(ASTInterfaceDeclaration node, java.lang.Object data)
           
 java.lang.Object visit(ASTMethodDeclarator node, java.lang.Object data)
          Create a MethodHolder to hold the method.
 java.lang.Object visit(ASTNestedClassDeclaration node, java.lang.Object data)
           
 java.lang.Object visit(ASTNestedInterfaceDeclaration node, java.lang.Object data)
           
 
Methods inherited from class net.sourceforge.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.pmd.ast.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
 
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(ASTCompilationUnit node,
                              java.lang.Object data)
Work on each file independently.

Specified by:
visit in interface JavaParserVisitor
Overrides:
visit in class JavaParserVisitorAdapter

visit

public java.lang.Object visit(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 JavaParserVisitor
Overrides:
visit in class JavaParserVisitorAdapter

visit

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

visit

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

visit

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

visit

public java.lang.Object visit(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 JavaParserVisitor
Overrides:
visit in class JavaParserVisitorAdapter

visit

public java.lang.Object visit(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 JavaParserVisitor
Overrides:
visit in class JavaParserVisitorAdapter


Copyright © 2002-2004 Project Ultra*Log @ DARPA. All Rights Reserved.