1 package net.sourceforge.pmd.lang.java.rule;
2
3 import java.util.List;
4
5 import net.sourceforge.pmd.Rule;
6 import net.sourceforge.pmd.RuleContext;
7 import net.sourceforge.pmd.lang.ast.Node;
8 import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
9 import net.sourceforge.pmd.lang.java.ast.JavaNode;
10 import net.sourceforge.pmd.lang.java.ast.JavaParserVisitor;
11 import net.sourceforge.pmd.lang.java.ast.JavaParserVisitorAdapter;
12 import net.sourceforge.pmd.lang.rule.AbstractRuleChainVisitor;
13 import net.sourceforge.pmd.lang.rule.XPathRule;
14
15 public class JavaRuleChainVisitor extends AbstractRuleChainVisitor {
16
17 protected void indexNodes(List<Node> nodes, RuleContext ctx) {
18 JavaParserVisitor javaParserVistor = new JavaParserVisitorAdapter() {
19
20
21 public Object visit(JavaNode node, Object data) {
22 indexNode(node);
23 return super.visit(node, data);
24 }
25 };
26
27 for (int i = 0; i < nodes.size(); i++) {
28 javaParserVistor.visit((ASTCompilationUnit)nodes.get(i), ctx);
29 }
30 }
31
32 protected void visit(Rule rule, Node node, RuleContext ctx) {
33
34 if (rule instanceof XPathRule) {
35 ((XPathRule)rule).evaluate(node, ctx);
36 } else {
37 ((JavaNode)node).jjtAccept((JavaParserVisitor)rule, ctx);
38 }
39 }
40 }