/******************************************************************************* * Copyright (c) 2005 BEA Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * BEA Systems - initial implementation * *******************************************************************************/ package org.eclipse.jst.jsp.core.internal.java.jspel; public class FindFunctionInvocationVisitor implements JSPELParserVisitor { protected int fCursorPosition; public FindFunctionInvocationVisitor(int cursorPosition) { fCursorPosition = cursorPosition; } protected boolean isEnclosing(SimpleNode node) { return(node.firstToken.beginColumn < fCursorPosition && node.lastToken.endColumn >= fCursorPosition); } protected Object visitEnclosingChild(SimpleNode node, Object data) { if(null == node.children) return null; for(int i = 0; i < node.children.length; i++) { if(isEnclosing(node)) return node.children[i].jjtAccept(this, data); } return null; } public Object visit(SimpleNode node, Object data) { return visitEnclosingChild(node, data); } public Object visit(ASTExpression node, Object data) { return visitEnclosingChild(node, data); } public Object visit(ASTOrExpression node, Object data) { return visitEnclosingChild(node, data); } public Object visit(ASTAndExpression node, Object data) { return visitEnclosingChild(node, data); } public Object visit(ASTEqualityExpression node, Object data) { return visitEnclosingChild(node, data); } public Object visit(ASTRelationalExpression node, Object data) { return visitEnclosingChild(node, data); } public Object visit(ASTAddExpression node, Object data) { return visitEnclosingChild(node, data); } public Object visit(ASTMultiplyExpression node, Object data) { return visitEnclosingChild(node, data); } public Object visit(ASTChoiceExpression node, Object data) { return visitEnclosingChild(node, data); } public Object visit(ASTUnaryExpression node, Object data) { return visitEnclosingChild(node, data); } public Object visit(ASTValue node, Object data) { return visitEnclosingChild(node, data); } public Object visit(ASTValuePrefix node, Object data) { return visitEnclosingChild(node, data); } public Object visit(ASTValueSuffix node, Object data) { return visitEnclosingChild(node, data); } public Object visit(ASTFunctionInvocation node, Object data) { Object nestedInvocation = visitEnclosingChild(node, data); if(null != nestedInvocation) return nestedInvocation; return node; } public Object visit(ASTLiteral node, Object data) { return visitEnclosingChild(node, data); } }