/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang.jsp.rule;
import java.util.List;
import net.sourceforge.pmd.Rule;
import net.sourceforge.pmd.RuleContext;
import net.sourceforge.pmd.lang.ast.Node;
import net.sourceforge.pmd.lang.jsp.ast.ASTCompilationUnit;
import net.sourceforge.pmd.lang.jsp.ast.JspNode;
import net.sourceforge.pmd.lang.jsp.ast.JspParserVisitor;
import net.sourceforge.pmd.lang.jsp.ast.JspParserVisitorAdapter;
import net.sourceforge.pmd.lang.rule.AbstractRuleChainVisitor;
import net.sourceforge.pmd.lang.rule.XPathRule;
public class JspRuleChainVisitor extends AbstractRuleChainVisitor {
protected void indexNodes(List<Node> nodes, RuleContext ctx) {
JspParserVisitor jspParserVisitor = new JspParserVisitorAdapter() {
// Perform a visitation of the AST to index nodes which need
// visiting by type
public Object visit(JspNode node, Object data) {
indexNode(node);
return super.visit(node, data);
}
};
for (int i = 0; i < nodes.size(); i++) {
jspParserVisitor.visit((ASTCompilationUnit) nodes.get(i), ctx);
}
}
protected void visit(Rule rule, Node node, RuleContext ctx) {
// Rule better either be a JspParserVisitor, or a XPathRule
if (rule instanceof JspParserVisitor) {
((JspNode) node).jjtAccept((JspParserVisitor) rule, ctx);
} else {
((XPathRule) rule).evaluate(node, ctx);
}
}
}