Class AbstractRule

All Implemented Interfaces:
Rule, PropertySource
Direct Known Subclasses:
AbstractVisitorRule, UnnecessaryPmdSuppressionRule, XPathRule

public abstract class AbstractRule extends AbstractPropertySource implements Rule
Basic abstract implementation of all parser-independent methods of the Rule interface.
Author:
pieter_van_raemdonck - Application Engineers NV/SA - www.ae.be
  • Constructor Details

    • AbstractRule

      public AbstractRule()
  • Method Details

    • getPropertySourceType

      protected String getPropertySourceType()
      Specified by:
      getPropertySourceType in class AbstractPropertySource
    • getLanguage

      public Language getLanguage()
      Description copied from interface: Rule
      Get the Language of this Rule.
      Specified by:
      getLanguage in interface Rule
      Returns:
      the language
    • setLanguage

      public void setLanguage(Language language)
      Description copied from interface: Rule
      Set the Language of this Rule.
      Specified by:
      setLanguage in interface Rule
      Parameters:
      language - the language
    • getMinimumLanguageVersion

      public LanguageVersion getMinimumLanguageVersion()
      Description copied from interface: Rule
      Get the minimum LanguageVersion to which this Rule applies. If this value is null it indicates there is no minimum bound.
      Specified by:
      getMinimumLanguageVersion in interface Rule
      Returns:
      the minimum language version
    • setMinimumLanguageVersion

      public void setMinimumLanguageVersion(LanguageVersion minimumLanguageVersion)
      Description copied from interface: Rule
      Set the minimum LanguageVersion to which this Rule applies.
      Specified by:
      setMinimumLanguageVersion in interface Rule
      Parameters:
      minimumLanguageVersion - the minimum language version
    • getMaximumLanguageVersion

      public LanguageVersion getMaximumLanguageVersion()
      Description copied from interface: Rule
      Get the maximum LanguageVersion to which this Rule applies. If this value is null it indicates there is no maximum bound.
      Specified by:
      getMaximumLanguageVersion in interface Rule
      Returns:
      the maximum language version
    • setMaximumLanguageVersion

      public void setMaximumLanguageVersion(LanguageVersion maximumLanguageVersion)
      Description copied from interface: Rule
      Set the maximum LanguageVersion to which this Rule applies.
      Specified by:
      setMaximumLanguageVersion in interface Rule
      Parameters:
      maximumLanguageVersion - the maximum language version
    • isDeprecated

      public boolean isDeprecated()
      Description copied from interface: Rule
      Gets whether this Rule is deprecated. A deprecated Rule is one which:
      • is scheduled for removal in a future version of PMD
      • or, has been removed and replaced with a non-functioning place-holder and will be completely removed in a future version of PMD
      • or, has been renamed/moved and the old name will be completely removed in a future version of PMD
      Specified by:
      isDeprecated in interface Rule
      Returns:
      true if this rule is deprecated
    • setDeprecated

      public void setDeprecated(boolean deprecated)
      Description copied from interface: Rule
      Sets whether this Rule is deprecated.
      Specified by:
      setDeprecated in interface Rule
      Parameters:
      deprecated - whether this rule is deprecated
    • getName

      public String getName()
      Description copied from interface: Rule
      Get the name of this Rule.
      Specified by:
      getName in interface PropertySource
      Specified by:
      getName in interface Rule
      Returns:
      the name
    • setName

      public void setName(String name)
      Description copied from interface: Rule
      Set the name of this Rule.
      Specified by:
      setName in interface Rule
      Parameters:
      name - the name
    • getSince

      public String getSince()
      Description copied from interface: Rule
      Get the version of PMD in which this Rule was added. Return null if not applicable.
      Specified by:
      getSince in interface Rule
      Returns:
      version of PMD since when this rule was added
    • setSince

      public void setSince(String since)
      Description copied from interface: Rule
      Set the version of PMD in which this Rule was added.
      Specified by:
      setSince in interface Rule
      Parameters:
      since - the version of PMD since when this rule was added
    • getRuleClass

      public String getRuleClass()
      Description copied from interface: Rule
      Get the implementation class of this Rule.
      Specified by:
      getRuleClass in interface Rule
      Returns:
      the implementation class name of this rule.
    • setRuleClass

      public void setRuleClass(String ruleClass)
      Description copied from interface: Rule
      Set the class of this Rule.
      Specified by:
      setRuleClass in interface Rule
      Parameters:
      ruleClass - the class name of this rule.
    • getRuleSetName

      public String getRuleSetName()
      Description copied from interface: Rule
      Get the name of the RuleSet containing this Rule.
      Specified by:
      getRuleSetName in interface Rule
      Returns:
      the name of th ruleset containing this rule.
      See Also:
    • setRuleSetName

      public void setRuleSetName(String ruleSetName)
      Description copied from interface: Rule
      Set the name of the RuleSet containing this Rule.
      Specified by:
      setRuleSetName in interface Rule
      Parameters:
      ruleSetName - the name of the ruleset containing this rule.
      See Also:
    • getMessage

      public String getMessage()
      Description copied from interface: Rule
      Get the message to show when this Rule identifies a violation.
      Specified by:
      getMessage in interface Rule
      Returns:
      the message to show for a violation.
    • setMessage

      public void setMessage(String message)
      Description copied from interface: Rule
      Set the message to show when this Rule identifies a violation.
      Specified by:
      setMessage in interface Rule
      Parameters:
      message - the message to show for a violation.
    • getDescription

      public String getDescription()
      Description copied from interface: Rule
      Get the description of this Rule.
      Specified by:
      getDescription in interface Rule
      Returns:
      the description
    • setDescription

      public void setDescription(String description)
      Description copied from interface: Rule
      Set the description of this Rule.
      Specified by:
      setDescription in interface Rule
      Parameters:
      description - the description
    • getExamples

      public List<String> getExamples()
      Description copied from interface: Rule
      Get the list of examples for this Rule.
      Specified by:
      getExamples in interface Rule
      Returns:
      the list of examples for this rule.
    • addExample

      public void addExample(String example)
      Description copied from interface: Rule
      Add a single example for this Rule.
      Specified by:
      addExample in interface Rule
      Parameters:
      example - a single example to add
    • getExternalInfoUrl

      public String getExternalInfoUrl()
      Description copied from interface: Rule
      Get a URL for external information about this Rule.
      Specified by:
      getExternalInfoUrl in interface Rule
      Returns:
      the URL for external information about this rule.
    • setExternalInfoUrl

      public void setExternalInfoUrl(String externalInfoUrl)
      Description copied from interface: Rule
      Set a URL for external information about this Rule.
      Specified by:
      setExternalInfoUrl in interface Rule
      Parameters:
      externalInfoUrl - the URL for external information about this rule.
    • getPriority

      public RulePriority getPriority()
      Description copied from interface: Rule
      Get the priority of this Rule.
      Specified by:
      getPriority in interface Rule
      Returns:
      the priority
    • setPriority

      public void setPriority(RulePriority priority)
      Description copied from interface: Rule
      Set the priority of this Rule.
      Specified by:
      setPriority in interface Rule
      Parameters:
      priority - the priority
    • getTargetSelector

      public final RuleTargetSelector getTargetSelector()
      Description copied from interface: Rule
      Returns the object that selects the nodes to which this rule applies. The selected nodes will be handed to Rule.apply(Node, RuleContext).
      Specified by:
      getTargetSelector in interface Rule
    • buildTargetSelector

      protected @NonNull RuleTargetSelector buildTargetSelector()
      Create the targeting strategy for this rule. Use the factory methods of RuleTargetSelector.
    • start

      public void start(RuleContext ctx)
      Description copied from interface: Rule
      Start processing. Called once per file, before apply() is first called.
      Specified by:
      start in interface Rule
      Parameters:
      ctx - the rule context
    • end

      public void end(RuleContext ctx)
      Description copied from interface: Rule
      End processing. Called once per file, after apply() is last called.
      Specified by:
      end in interface Rule
      Parameters:
      ctx - the rule context
    • asCtx

      protected final RuleContext asCtx(Object ctx)
      Cast the argument to a RuleContext. Use it to report violations:
      
        asCtx(data).addViolation(node);
        asCtx(data).addViolationWithMessage(node, "Some message");
       
      In longer term, rules will have type-safe access to a RuleContext, when the rules use an appropriate visitor. Many rules have not been refactored yet. Once this is done, this method will be deprecated as useless. Until then, this is a way to hide the explicit cast to RuleContext in rules.
    • equals

      public boolean equals(Object o)
      Rules are equal if:
      1. They have the same implementation class.
      2. They have the same name.
      3. They have the same priority.
      4. They share the same properties.
      Overrides:
      equals in class AbstractPropertySource
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class AbstractPropertySource
    • deepCopy

      public Rule deepCopy()
      Description copied from interface: Rule
      Creates a new copy of this rule.
      Specified by:
      deepCopy in interface Rule
      Returns:
      A new exact copy of this rule
    • dysfunctionReason

      public String dysfunctionReason()
      Description copied from interface: PropertySource
      Returns a description of why the receiver may be dysfunctional. Usually due to missing property values or some kind of conflict between values. Returns null if the receiver is ok.
      Specified by:
      dysfunctionReason in interface PropertySource
      Returns:
      String