diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/VmParserVisitorAdapter.java b/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/VmParserVisitorAdapter.java new file mode 100644 index 0000000000..31661fd7e2 --- /dev/null +++ b/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/VmParserVisitorAdapter.java @@ -0,0 +1,255 @@ +package net.sourceforge.pmd.lang.vm.ast; + +public class VmParserVisitorAdapter implements VmParserVisitor { + + @Override + public Object visit(final SimpleNode node, final Object data) { + node.childrenAccept(this, data); + return null; + } + + @Override + public Object visit(final ASTprocess node, final Object data) { + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTEscapedDirective node, final Object data) { + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTEscape node, final Object data) { + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTComment node, final Object data) { + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTTextblock node, final Object data) { + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTFloatingPointLiteral node, final Object data) { + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTIntegerLiteral node, final Object data) { + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTStringLiteral node, final Object data) { + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTIdentifier node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTWord node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTDirective node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTBlock node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTMap node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTObjectArray node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTIntegerRange node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTMethod node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTIndex node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTReference node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTTrue node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTFalse node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTText node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTForeachStatement node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTIfStatement node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTElseStatement node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTElseIfStatement node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTSetDirective node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTExpression node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTAssignment node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTOrNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTAndNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTEQNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTNENode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTLTNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTGTNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTLENode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTGENode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTAddNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTSubtractNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTMulNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTDivNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTModNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTNotNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + +} diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/AbstractVmRule.java b/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/AbstractVmRule.java index 31d4dbd1e5..9c9cb7dcec 100644 --- a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/AbstractVmRule.java +++ b/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/AbstractVmRule.java @@ -1,158 +1,331 @@ -/** - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ -package net.sourceforge.pmd.lang.vm.rule; - -import java.util.List; - -import net.sourceforge.pmd.RuleContext; -import net.sourceforge.pmd.lang.Language; -import net.sourceforge.pmd.lang.ast.Node; -import net.sourceforge.pmd.lang.jsp.ast.ASTAttribute; -import net.sourceforge.pmd.lang.jsp.ast.ASTAttributeValue; -import net.sourceforge.pmd.lang.jsp.ast.ASTCData; -import net.sourceforge.pmd.lang.jsp.ast.ASTCommentTag; -import net.sourceforge.pmd.lang.jsp.ast.ASTCompilationUnit; -import net.sourceforge.pmd.lang.jsp.ast.ASTContent; -import net.sourceforge.pmd.lang.jsp.ast.ASTDeclaration; -import net.sourceforge.pmd.lang.jsp.ast.ASTDoctypeDeclaration; -import net.sourceforge.pmd.lang.jsp.ast.ASTDoctypeExternalId; -import net.sourceforge.pmd.lang.jsp.ast.ASTElExpression; -import net.sourceforge.pmd.lang.jsp.ast.ASTElement; -import net.sourceforge.pmd.lang.jsp.ast.ASTHtmlScript; -import net.sourceforge.pmd.lang.jsp.ast.ASTJspComment; -import net.sourceforge.pmd.lang.jsp.ast.ASTJspDeclaration; -import net.sourceforge.pmd.lang.jsp.ast.ASTJspDirective; -import net.sourceforge.pmd.lang.jsp.ast.ASTJspDirectiveAttribute; -import net.sourceforge.pmd.lang.jsp.ast.ASTJspExpression; -import net.sourceforge.pmd.lang.jsp.ast.ASTJspExpressionInAttribute; -import net.sourceforge.pmd.lang.jsp.ast.ASTJspScriptlet; -import net.sourceforge.pmd.lang.jsp.ast.ASTText; -import net.sourceforge.pmd.lang.jsp.ast.ASTUnparsedText; -import net.sourceforge.pmd.lang.jsp.ast.ASTValueBinding; -import net.sourceforge.pmd.lang.jsp.ast.JspNode; -import net.sourceforge.pmd.lang.jsp.ast.JspParserVisitor; -import net.sourceforge.pmd.lang.rule.AbstractRule; -import net.sourceforge.pmd.lang.rule.ImmutableLanguage; - -public abstract class AbstractVmRule extends AbstractRule implements JspParserVisitor, ImmutableLanguage { - - public AbstractVmRule() { - super.setLanguage(Language.VM); - } - - @Override - public void setUsesTypeResolution() { - // No Type resolution for JSP rules? - } - - public void apply(final List nodes, final RuleContext ctx) { - visitAll(nodes, ctx); - } - - protected void visitAll(final List nodes, final RuleContext ctx) { - for (final Object element : nodes) { - final JspNode node = (JspNode) element; - visit(node, ctx); - } - } - - // - // The following APIs are identical to those in JspParserVisitorAdapter. - // Due to Java single inheritance, it preferred to extend from the more - // complex Rule base class instead of from relatively simple Visitor. - // - - public Object visit(final JspNode node, final Object data) { - node.childrenAccept(this, data); - return null; - } - - public Object visit(final ASTCompilationUnit node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTContent node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTJspDirective node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTJspDirectiveAttribute node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTJspScriptlet node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTJspExpression node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTJspDeclaration node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTJspComment node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTText node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTUnparsedText node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTElExpression node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTValueBinding node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTCData node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTElement node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTAttribute node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTAttributeValue node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTJspExpressionInAttribute node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTCommentTag node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTDeclaration node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTDoctypeDeclaration node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTDoctypeExternalId node, final Object data) { - return visit((JspNode) node, data); - } - - public Object visit(final ASTHtmlScript node, final Object data) { - return visit((JspNode) node, data); - } -} +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ +package net.sourceforge.pmd.lang.vm.rule; + +import java.util.List; + +import net.sourceforge.pmd.RuleContext; +import net.sourceforge.pmd.lang.Language; +import net.sourceforge.pmd.lang.ast.Node; +import net.sourceforge.pmd.lang.rule.AbstractRule; +import net.sourceforge.pmd.lang.rule.ImmutableLanguage; +import net.sourceforge.pmd.lang.vm.ast.ASTAddNode; +import net.sourceforge.pmd.lang.vm.ast.ASTAndNode; +import net.sourceforge.pmd.lang.vm.ast.ASTAssignment; +import net.sourceforge.pmd.lang.vm.ast.ASTBlock; +import net.sourceforge.pmd.lang.vm.ast.ASTComment; +import net.sourceforge.pmd.lang.vm.ast.ASTDirective; +import net.sourceforge.pmd.lang.vm.ast.ASTDivNode; +import net.sourceforge.pmd.lang.vm.ast.ASTEQNode; +import net.sourceforge.pmd.lang.vm.ast.ASTElseIfStatement; +import net.sourceforge.pmd.lang.vm.ast.ASTElseStatement; +import net.sourceforge.pmd.lang.vm.ast.ASTEscape; +import net.sourceforge.pmd.lang.vm.ast.ASTEscapedDirective; +import net.sourceforge.pmd.lang.vm.ast.ASTExpression; +import net.sourceforge.pmd.lang.vm.ast.ASTFalse; +import net.sourceforge.pmd.lang.vm.ast.ASTFloatingPointLiteral; +import net.sourceforge.pmd.lang.vm.ast.ASTForeachStatement; +import net.sourceforge.pmd.lang.vm.ast.ASTGENode; +import net.sourceforge.pmd.lang.vm.ast.ASTGTNode; +import net.sourceforge.pmd.lang.vm.ast.ASTIdentifier; +import net.sourceforge.pmd.lang.vm.ast.ASTIfStatement; +import net.sourceforge.pmd.lang.vm.ast.ASTIndex; +import net.sourceforge.pmd.lang.vm.ast.ASTIntegerLiteral; +import net.sourceforge.pmd.lang.vm.ast.ASTIntegerRange; +import net.sourceforge.pmd.lang.vm.ast.ASTLENode; +import net.sourceforge.pmd.lang.vm.ast.ASTLTNode; +import net.sourceforge.pmd.lang.vm.ast.ASTMap; +import net.sourceforge.pmd.lang.vm.ast.ASTMethod; +import net.sourceforge.pmd.lang.vm.ast.ASTModNode; +import net.sourceforge.pmd.lang.vm.ast.ASTMulNode; +import net.sourceforge.pmd.lang.vm.ast.ASTNENode; +import net.sourceforge.pmd.lang.vm.ast.ASTNotNode; +import net.sourceforge.pmd.lang.vm.ast.ASTObjectArray; +import net.sourceforge.pmd.lang.vm.ast.ASTOrNode; +import net.sourceforge.pmd.lang.vm.ast.ASTReference; +import net.sourceforge.pmd.lang.vm.ast.ASTSetDirective; +import net.sourceforge.pmd.lang.vm.ast.ASTStringLiteral; +import net.sourceforge.pmd.lang.vm.ast.ASTSubtractNode; +import net.sourceforge.pmd.lang.vm.ast.ASTText; +import net.sourceforge.pmd.lang.vm.ast.ASTTextblock; +import net.sourceforge.pmd.lang.vm.ast.ASTTrue; +import net.sourceforge.pmd.lang.vm.ast.ASTWord; +import net.sourceforge.pmd.lang.vm.ast.ASTprocess; +import net.sourceforge.pmd.lang.vm.ast.SimpleNode; +import net.sourceforge.pmd.lang.vm.ast.VmParserVisitor; + +public abstract class AbstractVmRule extends AbstractRule implements VmParserVisitor, ImmutableLanguage { + + public AbstractVmRule() { + super.setLanguage(Language.VM); + } + + @Override + public void setUsesTypeResolution() { + // No Type resolution for JSP rules? + } + + @Override + public void apply(final List nodes, final RuleContext ctx) { + visitAll(nodes, ctx); + } + + protected void visitAll(final List nodes, final RuleContext ctx) { + for (final Object element : nodes) { + final SimpleNode node = (SimpleNode) element; + visit(node, ctx); + } + } + + @Override + public Object visit(final SimpleNode node, final Object data) { + node.childrenAccept(this, data); + return null; + } + + @Override + public Object visit(final ASTprocess node, final Object data) { + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTEscapedDirective node, final Object data) { + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTEscape node, final Object data) { + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTComment node, final Object data) { + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTTextblock node, final Object data) { + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTFloatingPointLiteral node, final Object data) { + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTIntegerLiteral node, final Object data) { + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTStringLiteral node, final Object data) { + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTIdentifier node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTWord node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTDirective node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTBlock node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTMap node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTObjectArray node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTIntegerRange node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTMethod node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTIndex node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTReference node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTTrue node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTFalse node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTText node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTForeachStatement node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTIfStatement node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTElseStatement node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTElseIfStatement node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTSetDirective node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTExpression node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTAssignment node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTOrNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTAndNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTEQNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTNENode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTLTNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTGTNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTLENode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTGENode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTAddNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTSubtractNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTMulNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTDivNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTModNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + + @Override + public Object visit(final ASTNotNode node, final Object data) { + + return visit((SimpleNode) node, data); + } + +} diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/VmRuleChainVisitor.java b/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/VmRuleChainVisitor.java index 380855e855..12144e1165 100644 --- a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/VmRuleChainVisitor.java +++ b/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/VmRuleChainVisitor.java @@ -1,44 +1,44 @@ -package net.sourceforge.pmd.lang.vm.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 VmRuleChainVisitor extends AbstractRuleChainVisitor { - - @Override - protected void indexNodes(final List nodes, final RuleContext ctx) { - final JspParserVisitor jspParserVisitor = new JspParserVisitorAdapter() { - // Perform a visitation of the AST to index nodes which need - // visiting by type - @Override - public Object visit(final JspNode node, final Object data) { - indexNode(node); - return super.visit(node, data); - } - }; - - for (int i = 0; i < nodes.size(); i++) { - jspParserVisitor.visit((ASTCompilationUnit) nodes.get(i), ctx); - } - } - - @Override - protected void visit(final Rule rule, final Node node, final 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); - } - } -} +package net.sourceforge.pmd.lang.vm.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.rule.AbstractRuleChainVisitor; +import net.sourceforge.pmd.lang.rule.XPathRule; +import net.sourceforge.pmd.lang.vm.ast.ASTprocess; +import net.sourceforge.pmd.lang.vm.ast.SimpleNode; +import net.sourceforge.pmd.lang.vm.ast.VmParserVisitor; +import net.sourceforge.pmd.lang.vm.ast.VmParserVisitorAdapter; + +public class VmRuleChainVisitor extends AbstractRuleChainVisitor { + + @Override + protected void indexNodes(final List nodes, final RuleContext ctx) { + final VmParserVisitor vmParserVisitor = new VmParserVisitorAdapter() { + // Perform a visitation of the AST to index nodes which need + // visiting by type + @Override + public Object visit(final SimpleNode node, final Object data) { + indexNode(node); + return super.visit(node, data); + } + }; + + for (int i = 0; i < nodes.size(); i++) { + vmParserVisitor.visit((ASTprocess) nodes.get(i), ctx); + } + } + + @Override + protected void visit(final Rule rule, final Node node, final RuleContext ctx) { + // Rule better either be a VmParserVisitor, or a XPathRule + if (rule instanceof VmParserVisitor) { + ((SimpleNode) node).jjtAccept((VmParserVisitor) rule, ctx); + } + else { + ((XPathRule) rule).evaluate(node, ctx); + } + } +}