KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sourceforge > pmd > RuleSets


1 package net.sourceforge.pmd;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.Collection JavaDoc;
5 import java.util.HashSet JavaDoc;
6 import java.util.Iterator JavaDoc;
7 import java.util.List JavaDoc;
8 import java.util.Set JavaDoc;
9
10 /**
11  * Grouping of Rules per Language in a RuleSet.
12  *
13  * @author pieter_van_raemdonck - Application Engineers NV/SA - www.ae.be
14  */

15 public class RuleSets {
16     /**
17      * Map of RuleLanguage on RuleSet.
18      */

19     private Collection JavaDoc ruleSets = new ArrayList JavaDoc();
20
21     /**
22      * Public constructor.
23      */

24     public RuleSets() {
25     }
26
27     /**
28      * Public constructor. Add the given rule set.
29      *
30      * @param ruleSet the RuleSet
31      */

32     public RuleSets(RuleSet ruleSet) {
33         this();
34         addRuleSet(ruleSet);
35     }
36
37     /**
38      * Add a ruleset for a language. Only one ruleset can be added for a specific
39      * language. If ruleSet.getLanguage() is null, it is assumed to be a RuleSet of java
40      * rules.
41      *
42      * @param ruleSet the RuleSet
43      */

44     public void addRuleSet(RuleSet ruleSet) {
45         ruleSets.add(ruleSet);
46     }
47
48     /**
49      * Get all the RuleSets.
50      *
51      * @return RuleSet[]
52      */

53     public RuleSet[] getAllRuleSets() {
54         return (RuleSet[]) ruleSets.toArray(new RuleSet[ruleSets.size()]);
55     }
56
57     public Iterator JavaDoc getRuleSetsIterator() {
58         return ruleSets.iterator();
59     }
60
61     /**
62      * Return all rules from all rulesets.
63      *
64      * @return Set
65      */

66     public Set JavaDoc getAllRules() {
67         HashSet JavaDoc result = new HashSet JavaDoc();
68         for (Iterator JavaDoc i = ruleSets.iterator(); i.hasNext();) {
69             result.addAll(((RuleSet) i.next()).getRules());
70         }
71         return result;
72     }
73
74     /**
75      * Check if a source with given language should be checked by rules for a given
76      * language. This is the case if both languages are equal, or if the source is in
77      * java, and the language of the rules is unknown (for backward-compatibility
78      * reasons).
79      *
80      * @param languageOfSource language of a source; can not be null
81      * @param languageOfRule language of a ruleset; can be null
82      * @return boolean true if the rule applies, else false
83      */

84     public boolean applies(Language languageOfSource, Language languageOfRule) {
85         return (languageOfSource.equals(languageOfRule) || (languageOfSource
86                 .equals(Language.JAVA) && (null == languageOfRule)));
87     }
88
89     /**
90      * Apply all applicable rules to the compilation units.
91      * Applicable means the language of the rules must match the language
92      * of the source (@see applies).
93      *
94      * @param acuList the List of compilation units; the type these must have,
95      * depends on the source language
96      * @param ctx the RuleContext
97      * @param language the Language of the source
98      */

99     public void apply(List JavaDoc acuList, RuleContext ctx, Language language) {
100         for (Iterator JavaDoc i = ruleSets.iterator(); i.hasNext();) {
101             RuleSet ruleSet = (RuleSet) i.next();
102             if (applies(language, ruleSet.getLanguage())) {
103                 ruleSet.apply(acuList, ctx);
104             }
105         }
106     }
107
108     /**
109      * Check if the rules that apply to a source of the given language
110      * use DFA.
111      *
112      * @param language the language of a source
113      * @return true if any rule in the RuleSet needs the DFA layer
114      */

115     public boolean usesDFA(Language language) {
116         for (Iterator JavaDoc i = ruleSets.iterator(); i.hasNext();) {
117             RuleSet ruleSet = (RuleSet) i.next();
118             if (applies(language, ruleSet.getLanguage()) && ruleSet.usesDFA()) {
119                 return true;
120             }
121         }
122         return false;
123     }
124
125     /**
126      * Returns the Rule with the given name
127      *
128      * @param ruleName the name of the rule to find
129      * @return the rule or null if not found
130      */

131     public Rule getRuleByName(String JavaDoc ruleName) {
132         Rule rule = null;
133         for (Iterator JavaDoc i = ruleSets.iterator(); i.hasNext() && (rule == null);) {
134             RuleSet ruleSet = (RuleSet) i.next();
135             rule = ruleSet.getRuleByName(ruleName);
136         }
137         return rule;
138     }
139
140     public boolean usesTypeResolution(Language language) {
141         for (Iterator JavaDoc i = ruleSets.iterator(); i.hasNext();) {
142             RuleSet ruleSet = (RuleSet) i.next();
143             if (applies(language, ruleSet.getLanguage()) && ruleSet.usesTypeResolution()) {
144                 return true;
145             }
146         }
147         return false;
148     }
149 }
150
Popular Tags