Package org.apache.commons.jexl.parser

Source Code of org.apache.commons.jexl.parser.ASTMethod

package org.apache.commons.jexl.parser;

import java.lang.reflect.InvocationTargetException;

import org.apache.commons.jexl.JexlContext;
import org.apache.commons.jexl.util.Introspector;
import org.apache.commons.jexl.util.introspection.VelMethod;
import org.apache.commons.jexl.util.introspection.Info;

public class ASTMethod extends SimpleNode
{
    /** dummy velocity info */
    private static Info DUMMY = new Info("", 1, 1);

    public ASTMethod(int id)
    {
        super(id);
    }

    public ASTMethod(Parser p, int id)
    {
        super(p, id);
    }


    /** Accept the visitor. **/
    public Object jjtAccept(ParserVisitor visitor, Object data)
    {
        return visitor.visit(this, data);
    }

    /**
     *  returns the value of itself applied to the object.
     *   We assume that an identifier can be gotten via a get(String)
     */
    public Object execute(Object obj, JexlContext jc)
        throws Exception
    {
        String methodName = ((ASTIdentifier)jjtGetChild(0)).val;

        int paramCount = jjtGetNumChildren()-1;

        /*
         *  get our params
         */

        Object params[] = new Object[paramCount];

        try
        {
            for (int i=0; i<paramCount; i++)
            {
                params[i] = ( (SimpleNode) jjtGetChild(i+1)).value(jc);
            }

            VelMethod vm = Introspector.getUberspect().getMethod(obj, methodName, params, DUMMY);

            if (vm == null)
                return null;

            return vm.invoke(obj, params);
        }
        catch(InvocationTargetException e)
        {
            Throwable t = e.getTargetException();

            if (t instanceof Exception)
            {
                throw (Exception) t;
            }

            throw e;
        }
    }
}
TOP

Related Classes of org.apache.commons.jexl.parser.ASTMethod

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.