*
* @see com.sun.el.parser.NodeVisitor#visit(com.sun.el.parser.Node)
*/
public void visit(Node node) throws ELException {
if (node instanceof AstFunction) {
AstFunction funcNode = (AstFunction) node;
if ((funcNode.getPrefix().length() == 0) &&
(this.fnMapper == null || fnMapper.resolveFunction(
funcNode.getPrefix(),
funcNode.getLocalName()) == null)) {
// This can be a call to a LambdaExpression. The target
// of the call is a bean or an EL variable. Capture
// the variable name in the variable mapper if it is an
// variable. The decision to invoke the static method or
// the LambdaExpression will be made at runtime.
if (this.varMapper != null) {
this.varMapper.resolveVariable(funcNode.getLocalName());
}
return;
}
if (this.fnMapper == null) {
throw new ELException(MessageFactory.get("error.fnMapper.null"));
}
Method m = fnMapper.resolveFunction(funcNode.getPrefix(), funcNode
.getLocalName());
if (m == null) {
throw new ELException(MessageFactory.get(
"error.fnMapper.method", funcNode.getOutputName()));
}
int pcnt = m.getParameterTypes().length;
int acnt = ((AstMethodArguments)node.jjtGetChild(0)).getParameterCount();
if (acnt != pcnt) {
throw new ELException(MessageFactory.get(
"error.fnMapper.paramcount", funcNode.getOutputName(),
"" + pcnt, "" + acnt));
}
} else if (node instanceof AstIdentifier && this.varMapper != null) {
String variable = ((AstIdentifier) node).getImage();