View Javadoc

    1   /***
    2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
    3    */
    4   package net.sourceforge.pmd;
    5
    6   import java.util.ArrayList;
    7   import java.util.Collection;
    8   import java.util.Iterator;
    9   import java.util.List;
    10
    11
    12  /***
    13   * This class represents a collectin of rules.
    14   *
    15   * @see Rule
    16   */
    17  public class RuleSet {
    18
    19      private List rules = new ArrayList();
    20      private String name = "";
    21      private String description = "";
    22      private Language language;
    23
    24      /***
    25       * Returns the number of rules in this ruleset
    26       *
    27       * @return an int representing the number of rules
    28       */
    29      public int size() {
    30          return rules.size();
    31      }
    32
    33      /***
    34       * Add a new rule to this ruleset
    35       *
    36       * @param rule the rule to be added
    37       */
    38      public void addRule(Rule rule) {
    39          if (rule == null) {
    40              throw new RuntimeException("Null Rule reference added to a RuleSet; that's a bug somewhere in PMD");
    41          }
    42          rules.add(rule);
    43      }
    44
    45      /***
    46       * Returns the actual Collection of rules in this ruleset
    47       *
    48       * @return a Collection with the rules. All objects are of type {@link Rule}
    49       */
    50      public Collection getRules() {
    51          return rules;
    52      }
    53
    54      /***
    55       * @return true if any rule in the RuleSet needs the DFA layer
    56       */
    57      public boolean usesDFA() {
    58          for (Iterator i = rules.iterator(); i.hasNext();) {
    59              Rule r = (Rule) i.next();
    60              if (r.usesDFA()) {
    61                  return true;
    62              }
    63          }
    64          return false;
    65      }
    66
    67      /***
    68       * Returns the Rule with the given name
    69       *
    70       * @param ruleName the name of the rule to find
    71       * @return the rule or null if not found
    72       */
    73      public Rule getRuleByName(String ruleName) {
    74          Rule rule = null;
    75          for (Iterator i = rules.iterator(); i.hasNext() && (rule == null);) {
    76              Rule r = (Rule) i.next();
    77              if (r.getName().equals(ruleName)) {
    78                  rule = r;
    79              }
    80          }
    81          return rule;
    82      }
    83
    84      /***
    85       * Add a whole RuleSet to this RuleSet
    86       *
    87       * @param ruleSet the RuleSet to add
    88       */
    89      public void addRuleSet(RuleSet ruleSet) {
    90          rules.addAll(rules.size(), ruleSet.getRules());
    91      }
    92
    93      public void apply(List acuList, RuleContext ctx) {
    94          Iterator rs = rules.iterator();
    95          while (rs.hasNext()) {
    96              Rule rule = (Rule) rs.next();
    97              rule.apply(acuList, ctx);
    98          }
    99      }
    100
    101     /***
    102      * Gives the name of this ruleset
    103      *
    104      * @return a String representing the name
    105      */
    106     public String getName() {
    107         return name;
    108     }
    109
    110     /***
    111      * Set the name of this ruleset
    112      *
    113      * @param name a String representing the name
    114      */
    115     public void setName(String name) {
    116         this.name = name;
    117     }
    118
    119     /***
    120      * Gives the description of this ruleset
    121      *
    122      * @return a String representing the description
    123      */
    124     public String getDescription() {
    125         return description;
    126     }
    127
    128     /***
    129      * Set the description of this ruleset
    130      *
    131      * @param description a String representing the description
    132      */
    133     public void setDescription(String description) {
    134         this.description = description;
    135     }
    136
    137     /***
    138      * @see java.lang.Object#equals(java.lang.Object)
    139      */
    140     public boolean equals(Object o) {
    141         if ((o == null) || !(o instanceof RuleSet)) {
    142             return false; // Trivial
    143         }
    144
    145         if (this == o) {
    146             return true; // Basic equality
    147         }
    148
    149         RuleSet ruleSet = (RuleSet) o;
    150         return this.getName().equals(ruleSet.getName()) && this.getRules().equals(ruleSet.getRules());
    151     }
    152
    153     /***
    154      * @see java.lang.Object#hashCode()
    155      */
    156     public int hashCode() {
    157         return this.getName().hashCode() + 13 * this.getRules().hashCode();
    158     }
    159
    160     /***
    161      * @return Returns the language.
    162      */
    163     public Language getLanguage() {
    164         return language;
    165     }
    166
    167     /***
    168      * @param language The language to set.
    169      */
    170     public void setLanguage(Language language) {
    171         this.language = language;
    172     }
    173 }