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 }