Class ConstructorCallsOverridableMethodRule

  • All Implemented Interfaces:
    JavaParserVisitor, net.sourceforge.pmd.lang.rule.ImmutableLanguage, net.sourceforge.pmd.properties.PropertySource, net.sourceforge.pmd.Rule

    public final class ConstructorCallsOverridableMethodRule
    extends AbstractJavaRule
    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 ([email protected]) TODO match parameter types. Aggressively strips off any package names. Normal compares the names as is. TODO What about interface declarations which can have internal classes
    • Constructor Detail

      • ConstructorCallsOverridableMethodRule

        public ConstructorCallsOverridableMethodRule()
    • Method Detail

      • 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.

        TODO eliminate the redundancy

        Specified by:
        visit in interface JavaParserVisitor
        Overrides:
        visit in class AbstractJavaRule
      • 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 AbstractJavaRule