AbstractEcmascriptRule.java
001 /**
002  * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
003  */
004 package net.sourceforge.pmd.lang.ecmascript.rule;
005 
006 import java.util.List;
007 
008 import net.sourceforge.pmd.RuleContext;
009 import net.sourceforge.pmd.lang.Language;
010 import net.sourceforge.pmd.lang.ast.Node;
011 import net.sourceforge.pmd.lang.ecmascript.ast.ASTArrayComprehension;
012 import net.sourceforge.pmd.lang.ecmascript.ast.ASTArrayComprehensionLoop;
013 import net.sourceforge.pmd.lang.ecmascript.ast.ASTArrayLiteral;
014 import net.sourceforge.pmd.lang.ecmascript.ast.ASTAssignment;
015 import net.sourceforge.pmd.lang.ecmascript.ast.ASTAstRoot;
016 import net.sourceforge.pmd.lang.ecmascript.ast.ASTBlock;
017 import net.sourceforge.pmd.lang.ecmascript.ast.ASTBreakStatement;
018 import net.sourceforge.pmd.lang.ecmascript.ast.ASTCatchClause;
019 import net.sourceforge.pmd.lang.ecmascript.ast.ASTComment;
020 import net.sourceforge.pmd.lang.ecmascript.ast.ASTConditionalExpression;
021 import net.sourceforge.pmd.lang.ecmascript.ast.ASTContinueStatement;
022 import net.sourceforge.pmd.lang.ecmascript.ast.ASTDoLoop;
023 import net.sourceforge.pmd.lang.ecmascript.ast.ASTElementGet;
024 import net.sourceforge.pmd.lang.ecmascript.ast.ASTEmptyExpression;
025 import net.sourceforge.pmd.lang.ecmascript.ast.ASTExpressionStatement;
026 import net.sourceforge.pmd.lang.ecmascript.ast.ASTForInLoop;
027 import net.sourceforge.pmd.lang.ecmascript.ast.ASTForLoop;
028 import net.sourceforge.pmd.lang.ecmascript.ast.ASTFunctionCall;
029 import net.sourceforge.pmd.lang.ecmascript.ast.ASTFunctionNode;
030 import net.sourceforge.pmd.lang.ecmascript.ast.ASTIfStatement;
031 import net.sourceforge.pmd.lang.ecmascript.ast.ASTInfixExpression;
032 import net.sourceforge.pmd.lang.ecmascript.ast.ASTKeywordLiteral;
033 import net.sourceforge.pmd.lang.ecmascript.ast.ASTLabel;
034 import net.sourceforge.pmd.lang.ecmascript.ast.ASTLabeledStatement;
035 import net.sourceforge.pmd.lang.ecmascript.ast.ASTLetNode;
036 import net.sourceforge.pmd.lang.ecmascript.ast.ASTName;
037 import net.sourceforge.pmd.lang.ecmascript.ast.ASTNewExpression;
038 import net.sourceforge.pmd.lang.ecmascript.ast.ASTNumberLiteral;
039 import net.sourceforge.pmd.lang.ecmascript.ast.ASTObjectLiteral;
040 import net.sourceforge.pmd.lang.ecmascript.ast.ASTObjectProperty;
041 import net.sourceforge.pmd.lang.ecmascript.ast.ASTParenthesizedExpression;
042 import net.sourceforge.pmd.lang.ecmascript.ast.ASTPropertyGet;
043 import net.sourceforge.pmd.lang.ecmascript.ast.ASTRegExpLiteral;
044 import net.sourceforge.pmd.lang.ecmascript.ast.ASTReturnStatement;
045 import net.sourceforge.pmd.lang.ecmascript.ast.ASTScope;
046 import net.sourceforge.pmd.lang.ecmascript.ast.ASTStringLiteral;
047 import net.sourceforge.pmd.lang.ecmascript.ast.ASTSwitchCase;
048 import net.sourceforge.pmd.lang.ecmascript.ast.ASTSwitchStatement;
049 import net.sourceforge.pmd.lang.ecmascript.ast.ASTThrowStatement;
050 import net.sourceforge.pmd.lang.ecmascript.ast.ASTTryStatement;
051 import net.sourceforge.pmd.lang.ecmascript.ast.ASTUnaryExpression;
052 import net.sourceforge.pmd.lang.ecmascript.ast.ASTVariableDeclaration;
053 import net.sourceforge.pmd.lang.ecmascript.ast.ASTVariableInitializer;
054 import net.sourceforge.pmd.lang.ecmascript.ast.ASTWhileLoop;
055 import net.sourceforge.pmd.lang.ecmascript.ast.ASTWithStatement;
056 import net.sourceforge.pmd.lang.ecmascript.ast.ASTXmlDotQuery;
057 import net.sourceforge.pmd.lang.ecmascript.ast.ASTXmlExpression;
058 import net.sourceforge.pmd.lang.ecmascript.ast.ASTXmlMemberGet;
059 import net.sourceforge.pmd.lang.ecmascript.ast.ASTXmlString;
060 import net.sourceforge.pmd.lang.ecmascript.ast.EcmascriptNode;
061 import net.sourceforge.pmd.lang.ecmascript.ast.EcmascriptParserVisitor;
062 import net.sourceforge.pmd.lang.rule.AbstractRule;
063 import net.sourceforge.pmd.lang.rule.ImmutableLanguage;
064 
065 public abstract class AbstractEcmascriptRule extends AbstractRule implements EcmascriptParserVisitor, ImmutableLanguage {
066 
067     public AbstractEcmascriptRule() {
068   super.setLanguage(Language.ECMASCRIPT);
069     }
070 
071     public void apply(List<? extends Node> nodes, RuleContext ctx) {
072   visitAll(nodes, ctx);
073     }
074 
075     protected void visitAll(List<? extends Node> nodes, RuleContext ctx) {
076   for (Object element : nodes) {
077       ASTAstRoot node = (ASTAstRootelement;
078       visit(node, ctx);
079   }
080     }
081 
082     //
083     // The following APIs are identical to those in EcmascriptParserVisitorAdapter.
084     // Due to Java single inheritance, it preferred to extend from the more
085     // complex Rule base class instead of from relatively simple Visitor.
086     //
087 
088     public Object visit(EcmascriptNode node, Object data) {
089   node.childrenAccept(this, data);
090   return null;
091     }
092 
093     public Object visit(ASTArrayComprehension node, Object data) {
094   return visit((EcmascriptNodenode, data);
095     }
096 
097     public Object visit(ASTArrayComprehensionLoop node, Object data) {
098   return visit((EcmascriptNodenode, data);
099     }
100 
101     public Object visit(ASTArrayLiteral node, Object data) {
102   return visit((EcmascriptNodenode, data);
103     }
104 
105     public Object visit(ASTAssignment node, Object data) {
106   return visit((EcmascriptNodenode, data);
107     }
108 
109     public Object visit(ASTAstRoot node, Object data) {
110   return visit((EcmascriptNodenode, data);
111     }
112 
113     public Object visit(ASTBlock node, Object data) {
114   return visit((EcmascriptNodenode, data);
115     }
116 
117     public Object visit(ASTBreakStatement node, Object data) {
118   return visit((EcmascriptNodenode, data);
119     }
120 
121     public Object visit(ASTCatchClause node, Object data) {
122   return visit((EcmascriptNodenode, data);
123     }
124 
125     public Object visit(ASTComment node, Object data) {
126   return visit((EcmascriptNodenode, data);
127     }
128 
129     public Object visit(ASTConditionalExpression node, Object data) {
130   return visit((EcmascriptNodenode, data);
131     }
132 
133     public Object visit(ASTContinueStatement node, Object data) {
134   return visit((EcmascriptNodenode, data);
135     }
136 
137     public Object visit(ASTDoLoop node, Object data) {
138   return visit((EcmascriptNodenode, data);
139     }
140 
141     public Object visit(ASTElementGet node, Object data) {
142   return visit((EcmascriptNodenode, data);
143     }
144 
145     public Object visit(ASTEmptyExpression node, Object data) {
146   return visit((EcmascriptNodenode, data);
147     }
148 
149     public Object visit(ASTExpressionStatement node, Object data) {
150   return visit((EcmascriptNodenode, data);
151     }
152 
153     public Object visit(ASTForInLoop node, Object data) {
154   return visit((EcmascriptNodenode, data);
155     }
156 
157     public Object visit(ASTForLoop node, Object data) {
158   return visit((EcmascriptNodenode, data);
159     }
160 
161     public Object visit(ASTFunctionCall node, Object data) {
162   return visit((EcmascriptNodenode, data);
163     }
164 
165     public Object visit(ASTFunctionNode node, Object data) {
166   return visit((EcmascriptNodenode, data);
167     }
168 
169     public Object visit(ASTIfStatement node, Object data) {
170   return visit((EcmascriptNodenode, data);
171     }
172 
173     public Object visit(ASTInfixExpression node, Object data) {
174   return visit((EcmascriptNodenode, data);
175     }
176 
177     public Object visit(ASTKeywordLiteral node, Object data) {
178   return visit((EcmascriptNodenode, data);
179     }
180 
181     public Object visit(ASTLabel node, Object data) {
182   return visit((EcmascriptNodenode, data);
183     }
184 
185     public Object visit(ASTLabeledStatement node, Object data) {
186   return visit((EcmascriptNodenode, data);
187     }
188 
189     public Object visit(ASTLetNode node, Object data) {
190   return visit((EcmascriptNodenode, data);
191     }
192 
193     public Object visit(ASTName node, Object data) {
194   return visit((EcmascriptNodenode, data);
195     }
196 
197     public Object visit(ASTNewExpression node, Object data) {
198   return visit((EcmascriptNodenode, data);
199     }
200 
201     public Object visit(ASTNumberLiteral node, Object data) {
202   return visit((EcmascriptNodenode, data);
203     }
204 
205     public Object visit(ASTObjectLiteral node, Object data) {
206   return visit((EcmascriptNodenode, data);
207     }
208 
209     public Object visit(ASTObjectProperty node, Object data) {
210   return visit((EcmascriptNodenode, data);
211     }
212 
213     public Object visit(ASTParenthesizedExpression node, Object data) {
214   return visit((EcmascriptNodenode, data);
215     }
216 
217     public Object visit(ASTPropertyGet node, Object data) {
218   return visit((EcmascriptNodenode, data);
219     }
220 
221     public Object visit(ASTRegExpLiteral node, Object data) {
222   return visit((EcmascriptNodenode, data);
223     }
224 
225     public Object visit(ASTReturnStatement node, Object data) {
226   return visit((EcmascriptNodenode, data);
227     }
228 
229     public Object visit(ASTScope node, Object data) {
230   return visit((EcmascriptNodenode, data);
231     }
232 
233     public Object visit(ASTStringLiteral node, Object data) {
234   return visit((EcmascriptNodenode, data);
235     }
236 
237     public Object visit(ASTSwitchCase node, Object data) {
238   return visit((EcmascriptNodenode, data);
239     }
240 
241     public Object visit(ASTSwitchStatement node, Object data) {
242   return visit((EcmascriptNodenode, data);
243     }
244 
245     public Object visit(ASTThrowStatement node, Object data) {
246   return visit((EcmascriptNodenode, data);
247     }
248 
249     public Object visit(ASTTryStatement node, Object data) {
250   return visit((EcmascriptNodenode, data);
251     }
252 
253     public Object visit(ASTUnaryExpression node, Object data) {
254   return visit((EcmascriptNodenode, data);
255     }
256 
257     public Object visit(ASTVariableDeclaration node, Object data) {
258   return visit((EcmascriptNodenode, data);
259     }
260 
261     public Object visit(ASTVariableInitializer node, Object data) {
262   return visit((EcmascriptNodenode, data);
263     }
264 
265     public Object visit(ASTWhileLoop node, Object data) {
266   return visit((EcmascriptNodenode, data);
267     }
268 
269     public Object visit(ASTWithStatement node, Object data) {
270   return visit((EcmascriptNodenode, data);
271     }
272 
273     public Object visit(ASTXmlDotQuery node, Object data) {
274   return visit((EcmascriptNodenode, data);
275     }
276 
277     public Object visit(ASTXmlExpression node, Object data) {
278   return visit((EcmascriptNodenode, data);
279     }
280 
281     public Object visit(ASTXmlMemberGet node, Object data) {
282   return visit((EcmascriptNodenode, data);
283     }
284 
285     public Object visit(ASTXmlString node, Object data) {
286   return visit((EcmascriptNodenode, data);
287     }
288 }