net.sourceforge.pmd.rules

Class ConstructorCallsOverridableMethod

public final class ConstructorCallsOverridableMethod 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)

UNKNOWN: match parameter types. Aggressively strips off any package names. Normal compares the names as is. What about interface declarations which can have internal classes

Method Summary
Objectvisit(ASTCompilationUnit node, Object data)
Objectvisit(ASTEnumDeclaration node, Object data)
Objectvisit(ASTClassOrInterfaceDeclaration node, Object data)
This check must be evaluated independelty for each class.
Objectvisit(ASTConstructorDeclaration node, Object data)
Non-private constructor's methods are added to a list for later safety evaluation.
Objectvisit(ASTMethodDeclarator node, Object data)
Create a MethodHolder to hold the method.

Method Detail

visit

public Object visit(ASTCompilationUnit node, Object data)

visit

public Object visit(ASTEnumDeclaration node, Object data)

visit

public Object visit(ASTClassOrInterfaceDeclaration node, Object data)
This check must be evaluated independelty for each class. Inner classses get their own EvalPackage in order to perform independent evaluation.

visit

public Object visit(ASTConstructorDeclaration node, 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.

UNKNOWN: eliminate the redundency

visit

public Object visit(ASTMethodDeclarator node, 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