예제 #1
0
    private KeyValuePair <bool, string> GenerateGenericMethodTemplate(MetaMethodInfo method, string parameters)
    {
        Type classType = method.method.ReflectedType;

        string externionsClassName  = "Generic." + classType.Name + "Externions";
        string externionsMethodName = method.name;

        if (!CheckExternionsMethod(externionsClassName, externionsMethodName, method.method))
        {
            var pars             = method.method.GetParameters();
            var args             = method.method.GetGenericArguments();
            var parametersString = "";

            if (!method.method.IsStatic)
            {
                parametersString += "this " + classType.FullName + " self";
                if (parameters.Length > 0 || args.Length > 0)
                {
                    parametersString += ", ";
                }
            }

            for (int i = 0; i < pars.Length; i++)
            {
                if (i != 0)
                {
                    parametersString += ", ";
                }
                var par = pars[i];
                parametersString += par.ParameterType.FullName + " " + par.Name;
            }

            for (int i = 0; i < args.Length; i++)
            {
                if (i != 0 || pars.Length > 0)
                {
                    parametersString += ", ";
                }
                parametersString += "System.Type " + args[i].Name;
            }

            var csharpMethod = string.Format("{0}.{1}({2})", externionsClassName, externionsMethodName, parametersString);
            Debug.LogWarningFormat("没有找到泛型方法的Lua导出:{0}", csharpMethod);

            return(new KeyValuePair <bool, string>(false, csharpMethod));
        }
        else
        {
            return(new KeyValuePair <bool, string>(true, string.Format("{0}.{1}({2}{3})", externionsClassName, externionsMethodName, method.method.IsStatic ? string.Empty : (parameters.Length > 0 ? "{this}, " : "{this}"), parameters)));
        }
    }
예제 #2
0
    void GenerateMethod(MetaMethodInfo method, bool forceBaned = false)
    {
        Type classType  = method.method.ReflectedType;
        var  pars       = method.method.GetParameters();
        var  parameters = "";

        for (int i = 0; i < pars.Length; i++)
        {
            if (i != 0)
            {
                parameters += ", ";
            }
            var par = pars[i];
            parameters += "{" + (IsParams(par) ? "*" : string.Empty) + i.ToString() + "}";
        }

        if (method.method.IsGenericMethod)
        {
            var args = method.method.GetGenericArguments();
            for (int i = 0; i < args.Length; i++)
            {
                if (i != 0 || pars.Length > 0)
                {
                    parameters += ", ";
                }
                parameters += "System.TypeOfTolua({^" + i.ToString() + "})";
            }
        }
        KeyValuePair <bool, string> template;

        if (forceBaned)
        {
            template = new KeyValuePair <bool, string>(false, "custom baned!");
        }
        else
        {
            template = (method.method.IsGenericMethod ? GenerateGenericMethodTemplate(method, parameters) : new KeyValuePair <bool, string>(true, GenerateNormalMethodTemplate(method, parameters)));
        }

        var genericArgumentsLength = (method.method.IsGenericMethod ? method.method.GetGenericArguments().Length : 0);

        sb.AppendFormat("\t\t\t\t<method name=\"{0}\" GenericArgCount=\"{1}\"{2}>\n", method.method.Name, genericArgumentsLength, !template.Key ? " Baned=\"true\" NotImplementMethod=\"" + template.Value + "\"" : " Template=\"" + template.Value + "\"");

        for (int i = 0; i < pars.Length; i++)
        {
            var par = pars[i];
            sb.AppendFormat(GetArgumentTypeString(par.ParameterType, 5));
        }
        sb.AppendFormat("\t\t\t\t</method>\n");
    }
예제 #3
0
    string GenerateNormalMethodTemplate(MetaMethodInfo method, string parameters)
    {
        Type classType = method.method.ReflectedType;

        return(string.Format("{0}{1}({2})", method.method.IsStatic ? classType.FullName + "." : "{this}:", method.name, parameters, " GenericArgCount=\"0\""));
    }