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 = (ASTAstRoot) element;
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((EcmascriptNode) node, data);
095 }
096
097 public Object visit(ASTArrayComprehensionLoop node, Object data) {
098 return visit((EcmascriptNode) node, data);
099 }
100
101 public Object visit(ASTArrayLiteral node, Object data) {
102 return visit((EcmascriptNode) node, data);
103 }
104
105 public Object visit(ASTAssignment node, Object data) {
106 return visit((EcmascriptNode) node, data);
107 }
108
109 public Object visit(ASTAstRoot node, Object data) {
110 return visit((EcmascriptNode) node, data);
111 }
112
113 public Object visit(ASTBlock node, Object data) {
114 return visit((EcmascriptNode) node, data);
115 }
116
117 public Object visit(ASTBreakStatement node, Object data) {
118 return visit((EcmascriptNode) node, data);
119 }
120
121 public Object visit(ASTCatchClause node, Object data) {
122 return visit((EcmascriptNode) node, data);
123 }
124
125 public Object visit(ASTComment node, Object data) {
126 return visit((EcmascriptNode) node, data);
127 }
128
129 public Object visit(ASTConditionalExpression node, Object data) {
130 return visit((EcmascriptNode) node, data);
131 }
132
133 public Object visit(ASTContinueStatement node, Object data) {
134 return visit((EcmascriptNode) node, data);
135 }
136
137 public Object visit(ASTDoLoop node, Object data) {
138 return visit((EcmascriptNode) node, data);
139 }
140
141 public Object visit(ASTElementGet node, Object data) {
142 return visit((EcmascriptNode) node, data);
143 }
144
145 public Object visit(ASTEmptyExpression node, Object data) {
146 return visit((EcmascriptNode) node, data);
147 }
148
149 public Object visit(ASTExpressionStatement node, Object data) {
150 return visit((EcmascriptNode) node, data);
151 }
152
153 public Object visit(ASTForInLoop node, Object data) {
154 return visit((EcmascriptNode) node, data);
155 }
156
157 public Object visit(ASTForLoop node, Object data) {
158 return visit((EcmascriptNode) node, data);
159 }
160
161 public Object visit(ASTFunctionCall node, Object data) {
162 return visit((EcmascriptNode) node, data);
163 }
164
165 public Object visit(ASTFunctionNode node, Object data) {
166 return visit((EcmascriptNode) node, data);
167 }
168
169 public Object visit(ASTIfStatement node, Object data) {
170 return visit((EcmascriptNode) node, data);
171 }
172
173 public Object visit(ASTInfixExpression node, Object data) {
174 return visit((EcmascriptNode) node, data);
175 }
176
177 public Object visit(ASTKeywordLiteral node, Object data) {
178 return visit((EcmascriptNode) node, data);
179 }
180
181 public Object visit(ASTLabel node, Object data) {
182 return visit((EcmascriptNode) node, data);
183 }
184
185 public Object visit(ASTLabeledStatement node, Object data) {
186 return visit((EcmascriptNode) node, data);
187 }
188
189 public Object visit(ASTLetNode node, Object data) {
190 return visit((EcmascriptNode) node, data);
191 }
192
193 public Object visit(ASTName node, Object data) {
194 return visit((EcmascriptNode) node, data);
195 }
196
197 public Object visit(ASTNewExpression node, Object data) {
198 return visit((EcmascriptNode) node, data);
199 }
200
201 public Object visit(ASTNumberLiteral node, Object data) {
202 return visit((EcmascriptNode) node, data);
203 }
204
205 public Object visit(ASTObjectLiteral node, Object data) {
206 return visit((EcmascriptNode) node, data);
207 }
208
209 public Object visit(ASTObjectProperty node, Object data) {
210 return visit((EcmascriptNode) node, data);
211 }
212
213 public Object visit(ASTParenthesizedExpression node, Object data) {
214 return visit((EcmascriptNode) node, data);
215 }
216
217 public Object visit(ASTPropertyGet node, Object data) {
218 return visit((EcmascriptNode) node, data);
219 }
220
221 public Object visit(ASTRegExpLiteral node, Object data) {
222 return visit((EcmascriptNode) node, data);
223 }
224
225 public Object visit(ASTReturnStatement node, Object data) {
226 return visit((EcmascriptNode) node, data);
227 }
228
229 public Object visit(ASTScope node, Object data) {
230 return visit((EcmascriptNode) node, data);
231 }
232
233 public Object visit(ASTStringLiteral node, Object data) {
234 return visit((EcmascriptNode) node, data);
235 }
236
237 public Object visit(ASTSwitchCase node, Object data) {
238 return visit((EcmascriptNode) node, data);
239 }
240
241 public Object visit(ASTSwitchStatement node, Object data) {
242 return visit((EcmascriptNode) node, data);
243 }
244
245 public Object visit(ASTThrowStatement node, Object data) {
246 return visit((EcmascriptNode) node, data);
247 }
248
249 public Object visit(ASTTryStatement node, Object data) {
250 return visit((EcmascriptNode) node, data);
251 }
252
253 public Object visit(ASTUnaryExpression node, Object data) {
254 return visit((EcmascriptNode) node, data);
255 }
256
257 public Object visit(ASTVariableDeclaration node, Object data) {
258 return visit((EcmascriptNode) node, data);
259 }
260
261 public Object visit(ASTVariableInitializer node, Object data) {
262 return visit((EcmascriptNode) node, data);
263 }
264
265 public Object visit(ASTWhileLoop node, Object data) {
266 return visit((EcmascriptNode) node, data);
267 }
268
269 public Object visit(ASTWithStatement node, Object data) {
270 return visit((EcmascriptNode) node, data);
271 }
272
273 public Object visit(ASTXmlDotQuery node, Object data) {
274 return visit((EcmascriptNode) node, data);
275 }
276
277 public Object visit(ASTXmlExpression node, Object data) {
278 return visit((EcmascriptNode) node, data);
279 }
280
281 public Object visit(ASTXmlMemberGet node, Object data) {
282 return visit((EcmascriptNode) node, data);
283 }
284
285 public Object visit(ASTXmlString node, Object data) {
286 return visit((EcmascriptNode) node, data);
287 }
288 }
|