1
2
3
4 package net.sourceforge.pmd;
5
6 import java.io.File;
7 import java.util.ArrayList;
8 import java.util.Collection;
9 import java.util.HashSet;
10 import java.util.Iterator;
11 import java.util.List;
12 import java.util.Set;
13
14 import net.sourceforge.pmd.lang.Language;
15 import net.sourceforge.pmd.lang.ast.Node;
16
17
18
19
20
21
22 public class RuleSets {
23
24
25
26 private Collection<RuleSet> ruleSets = new ArrayList<RuleSet>();
27
28
29
30
31 private RuleChain ruleChain = new RuleChain();
32
33
34
35
36 public RuleSets() {
37 }
38
39
40
41
42
43
44 public RuleSets(RuleSet ruleSet) {
45 this();
46 addRuleSet(ruleSet);
47 }
48
49
50
51
52
53
54
55
56 public void addRuleSet(RuleSet ruleSet) {
57 ruleSets.add(ruleSet);
58 ruleChain.add(ruleSet);
59 }
60
61
62
63
64
65
66 public RuleSet[] getAllRuleSets() {
67 return ruleSets.toArray(new RuleSet[ruleSets.size()]);
68 }
69
70 public Iterator<RuleSet> getRuleSetsIterator() {
71 return ruleSets.iterator();
72 }
73
74
75
76
77
78
79 public Set<Rule> getAllRules() {
80 Set<Rule> result = new HashSet<Rule>();
81 for (RuleSet r : ruleSets) {
82 result.addAll(r.getRules());
83 }
84 return result;
85 }
86
87
88
89
90
91
92
93 public boolean applies(File file) {
94 for (RuleSet ruleSet : ruleSets) {
95 if (ruleSet.applies(file)) {
96 return true;
97 }
98 }
99 return false;
100 }
101
102
103
104
105 public void start(RuleContext ctx) {
106 for (RuleSet ruleSet : ruleSets) {
107 ruleSet.start(ctx);
108 }
109 }
110
111
112
113
114
115
116
117
118
119
120
121 public void apply(List<Node> acuList, RuleContext ctx, Language language) {
122 ruleChain.apply(acuList, ctx, language);
123 for (RuleSet ruleSet : ruleSets) {
124 if (ruleSet.applies(ctx.getSourceCodeFile())) {
125 ruleSet.apply(acuList, ctx);
126 }
127 }
128 }
129
130
131
132
133 public void end(RuleContext ctx) {
134 for (RuleSet ruleSet : ruleSets) {
135 ruleSet.end(ctx);
136 }
137 }
138
139
140
141
142
143
144
145
146 public boolean usesDFA(Language language) {
147 for (RuleSet ruleSet : ruleSets) {
148 if (ruleSet.usesDFA(language)) {
149 return true;
150 }
151 }
152 return false;
153 }
154
155
156
157
158
159
160
161
162
163
164
165 public Rule getRuleByName(String ruleName) {
166 Rule rule = null;
167 for (Iterator<RuleSet> i = ruleSets.iterator(); i.hasNext() && rule == null;) {
168 RuleSet ruleSet = i.next();
169 rule = ruleSet.getRuleByName(ruleName);
170 }
171 return rule;
172 }
173
174
175
176
177
178 public int ruleCount() {
179 int count = 0;
180 for (RuleSet r : ruleSets) {
181 count += r.getRules().size();
182 }
183 return count;
184 }
185
186 public boolean usesTypeResolution(Language language) {
187 for (RuleSet ruleSet : ruleSets) {
188 if (ruleSet.usesTypeResolution(language)) {
189 return true;
190 }
191 }
192 return false;
193 }
194
195
196
197
198
199
200 public void removeDysfunctionalRules(Collection<Rule> collector) {
201
202 for (RuleSet ruleSet : ruleSets) {
203 ruleSet.removeDysfunctionalRules(collector);
204 }
205 }
206 }