All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sourceforge.pmd.Rule Maven / Gradle / Ivy

There is a newer version: 7.7.0
Show newest version
/**
 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
 */

package net.sourceforge.pmd;

import java.util.List;

import net.sourceforge.pmd.lang.Language;
import net.sourceforge.pmd.lang.LanguageProcessor;
import net.sourceforge.pmd.lang.LanguageVersion;
import net.sourceforge.pmd.lang.ast.Node;
import net.sourceforge.pmd.lang.rule.RuleTargetSelector;
import net.sourceforge.pmd.properties.PropertySource;
import net.sourceforge.pmd.properties.StringProperty;

/**
 * This is the basic Rule interface for PMD rules.
 *
 * 

* Thread safety: PMD will create one instance of a rule per * thread. The instances are not shared across different threads. However, a * single rule instance is reused for analyzing multiple files. *

*/ public interface Rule extends PropertySource { /** * The property descriptor to universally suppress violations with messages * matching a regular expression. */ // TODO 7.0.0 use PropertyDescriptor> StringProperty VIOLATION_SUPPRESS_REGEX_DESCRIPTOR = new StringProperty("violationSuppressRegex", "Suppress violations with messages matching a regular expression", null, Integer.MAX_VALUE - 1); /** * Name of the property to universally suppress violations on nodes which * match a given relative XPath expression. */ // TODO 7.0.0 use PropertyDescriptor> StringProperty VIOLATION_SUPPRESS_XPATH_DESCRIPTOR = new StringProperty("violationSuppressXPath", "Suppress violations on nodes which match a given relative XPath expression.", null, Integer.MAX_VALUE - 2); /** * Get the Language of this Rule. * * @return the language */ Language getLanguage(); /** * Set the Language of this Rule. * * @param language * the language */ void setLanguage(Language language); /** * Get the minimum LanguageVersion to which this Rule applies. If this value * is null it indicates there is no minimum bound. * * @return the minimum language version */ LanguageVersion getMinimumLanguageVersion(); /** * Set the minimum LanguageVersion to which this Rule applies. * * @param minimumLanguageVersion * the minimum language version */ void setMinimumLanguageVersion(LanguageVersion minimumLanguageVersion); /** * Get the maximum LanguageVersion to which this Rule applies. If this value * is null it indicates there is no maximum bound. * * @return the maximum language version */ LanguageVersion getMaximumLanguageVersion(); /** * Set the maximum LanguageVersion to which this Rule applies. * * @param maximumLanguageVersion * the maximum language version */ void setMaximumLanguageVersion(LanguageVersion maximumLanguageVersion); /** * 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
  • *
* * @return true if this rule is deprecated */ boolean isDeprecated(); /** * Sets whether this Rule is deprecated. * * @param deprecated * whether this rule is deprecated */ void setDeprecated(boolean deprecated); /** * Get the name of this Rule. * * @return the name */ @Override String getName(); /** * Set the name of this Rule. * * @param name * the name */ void setName(String name); /** * Get the version of PMD in which this Rule was added. Return * null if not applicable. * * @return version of PMD since when this rule was added */ String getSince(); /** * Set the version of PMD in which this Rule was added. * * @param since * the version of PMD since when this rule was added */ void setSince(String since); /** * Get the implementation class of this Rule. * * @return the implementation class name of this rule. */ String getRuleClass(); /** * Set the class of this Rule. * * @param ruleClass * the class name of this rule. */ void setRuleClass(String ruleClass); /** * Get the name of the RuleSet containing this Rule. * * @return the name of th ruleset containing this rule. * @see RuleSet */ String getRuleSetName(); /** * Set the name of the RuleSet containing this Rule. * * @param name * the name of the ruleset containing this rule. * @see RuleSet */ void setRuleSetName(String name); /** * Get the message to show when this Rule identifies a violation. * * @return the message to show for a violation. */ String getMessage(); /** * Set the message to show when this Rule identifies a violation. * * @param message * the message to show for a violation. */ void setMessage(String message); /** * Get the description of this Rule. * * @return the description */ String getDescription(); /** * Set the description of this Rule. * * @param description * the description */ void setDescription(String description); /** * Get the list of examples for this Rule. * * @return the list of examples for this rule. */ List getExamples(); /** * Add a single example for this Rule. * * @param example * a single example to add */ void addExample(String example); /** * Get a URL for external information about this Rule. * * @return the URL for external information about this rule. */ String getExternalInfoUrl(); /** * Set a URL for external information about this Rule. * * @param externalInfoUrl * the URL for external information about this rule. */ void setExternalInfoUrl(String externalInfoUrl); /** * Get the priority of this Rule. * * @return the priority */ RulePriority getPriority(); /** * Set the priority of this Rule. * * @param priority * the priority */ void setPriority(RulePriority priority); /** * Returns the object that selects the nodes to which this rule applies. * The selected nodes will be handed to {@link #apply(Node, RuleContext)}. */ RuleTargetSelector getTargetSelector(); /** * Initialize the rule using the language processor if needed. * * @param languageProcessor The processor for the rule's language */ default void initialize(LanguageProcessor languageProcessor) { // by default do nothing } /** * Start processing. Called once per file, before apply() is first called. * * @param ctx the rule context */ void start(RuleContext ctx); /** * Process the given node. The nodes that are fed to this method * are the nodes selected by {@link #getTargetSelector()}. * * @param target Node on which to apply the rule * @param ctx Rule context, handling violations */ void apply(Node target, RuleContext ctx); /** * End processing. Called once per file, after apply() is last called. * * @param ctx * the rule context */ void end(RuleContext ctx); /** * Creates a new copy of this rule. * @return A new exact copy of this rule */ Rule deepCopy(); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy