/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.lang.ecmascript.ast; import org.mozilla.javascript.ast.FunctionNode; public class ASTFunctionNode extends AbstractEcmascriptNode<FunctionNode> { public ASTFunctionNode(FunctionNode functionNode) { super(functionNode); super.setImage(functionNode.getName()); } /** * Accept the visitor. */ public Object jjtAccept(EcmascriptParserVisitor visitor, Object data) { return visitor.visit(this, data); } public int getNumParams() { return node.getParams().size(); } public ASTName getFunctionName() { if (node.getFunctionName() != null) { return (ASTName) jjtGetChild(0); } return null; } public EcmascriptNode<?> getParam(int index) { int paramIndex = index; if (node.getFunctionName() != null) { paramIndex = index + 1; } return (EcmascriptNode<?>) jjtGetChild(paramIndex); } public EcmascriptNode<?> getBody() { return (EcmascriptNode<?>) jjtGetChild(jjtGetNumChildren() - 1); } @Deprecated // use getBody() instead public EcmascriptNode<?> getBody(int index) { return getBody(); } public boolean isClosure() { return node.isExpressionClosure(); } public boolean isGetter() { return node.isGetterMethod(); } public boolean isSetter() { return node.isSetterMethod(); } public boolean isGetterOrSetter() { return isGetter() || isSetter(); } }