Beispiel #1
0
 public AstFunction(string name, int index, AstParameters @params, bool varargs)
 {
     this.name    = name;
     this.index   = index;
     this.@params = @params;
     this.varargs = varargs;
 }
Beispiel #2
0
        protected internal AstFunction function(string name, AstParameters @params)
        {
            if (functions.Count == 0)
            {
                functions = new List <FunctionNode>(4);
            }
            AstFunction function = createAstFunction(name, functions.Count, @params);

            functions.Add(function);
            return(function);
        }
Beispiel #3
0
 public AstMethod(AstProperty property, AstParameters @params)
 {
     this.property = property;
     this.@params  = @params;
 }
Beispiel #4
0
        /// <summary>
        /// Invoke method. </summary>
        /// <param name="bindings"> </param>
        /// <param name="context"> </param>
        /// <param name="base"> </param>
        /// <param name="method"> </param>
        /// <returns> method result </returns>
        /// <exception cref="InvocationTargetException"> </exception>
        /// <exception cref="IllegalAccessException"> </exception>
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: protected Object invoke(Bindings bindings, org.camunda.bpm.engine.impl.javax.el.ELContext context, Object super, Method method) throws InvocationTargetException, IllegalAccessException
        protected internal virtual object invoke(Bindings bindings, ELContext context, object @base, System.Reflection.MethodInfo method)
        {
            Type[]   types   = method.ParameterTypes;
            object[] @params = null;
            if (types.Length > 0)
            {
                @params = new object[types.Length];
                if (varargs && method.VarArgs)
                {
                    for (int i = 0; i < @params.Length - 1; i++)
                    {
                        object param = getParam(i).eval(bindings, context);
                        if (param != null || types[i].IsPrimitive)
                        {
                            @params[i] = bindings.convert(param, types[i]);
                        }
                    }
                    int    varargIndex = types.Length - 1;
                    Type   varargType  = types[varargIndex].GetElementType();
                    int    length      = ParamCount - varargIndex;
                    object array       = null;
                    if (length == 1)
                    {                     // special: eventually use argument as is
                        object param = getParam(varargIndex).eval(bindings, context);
                        if (param != null && param.GetType().IsArray)
                        {
                            if (types[varargIndex].IsInstanceOfType(param))
                            {
                                array = param;
                            }
                            else
                            {                             // coerce array elements
                                length = Array.getLength(param);
                                array  = Array.CreateInstance(varargType, length);
                                for (int i = 0; i < length; i++)
                                {
                                    object elem = Array.get(param, i);
                                    if (elem != null || varargType.IsPrimitive)
                                    {
                                        ((Array)array).SetValue(bindings.convert(elem, varargType), i);
                                    }
                                }
                            }
                        }
                        else
                        {                         // single element array
                            array = Array.CreateInstance(varargType, 1);
                            if (param != null || varargType.IsPrimitive)
                            {
                                ((Array)array).SetValue(bindings.convert(param, varargType), 0);
                            }
                        }
                    }
                    else
                    {
                        array = Array.CreateInstance(varargType, length);
                        for (int i = 0; i < length; i++)
                        {
                            object param = getParam(varargIndex + i).eval(bindings, context);
                            if (param != null || varargType.IsPrimitive)
                            {
                                ((Array)array).SetValue(bindings.convert(param, varargType), i);
                            }
                        }
                    }
                    @params[varargIndex] = array;
                }
                else
                {
                    for (int i = 0; i < @params.Length; i++)
                    {
                        object param = getParam(i).eval(bindings, context);
                        if (param != null || types[i].IsPrimitive)
                        {
                            @params[i] = bindings.convert(param, types[i]);
                        }
                    }
                }
            }
            return(method.invoke(@base, @params));
        }
Beispiel #5
0
 public AstFunction(string name, int index, AstParameters @params) : this(name, index, @params, false)
 {
 }
Beispiel #6
0
 protected internal virtual AstMethod createAstMethod(AstProperty property, AstParameters @params)
 {
     return(new AstMethod(property, @params));
 }
Beispiel #7
0
 protected internal virtual AstFunction createAstFunction(string name, int index, AstParameters @params)
 {
     return(new AstFunction(name, index, @params, context.isEnabled(Feature.VARARGS)));
 }