コード例 #1
0
        // 输出所有变体绑定
        // hasOverrides: 是否需要处理重载
        protected void WriteAllVariants(MethodBaseBindingInfo <T> bindingInfo) // SortedDictionary<int, MethodBaseVariant<T>> variants)
        {
            var variants     = bindingInfo.variants;
            var hasOverrides = bindingInfo.count > 1;

            if (hasOverrides)
            {
                // 需要处理重载
                GenMethodVariants(variants);
            }
            else
            {
                // 没有重载的情况 (variants.Count == 1)
                foreach (var variantKV in variants)
                {
                    var args    = variantKV.Key;
                    var variant = variantKV.Value;
                    var argc    = cg.AppendGetArgCount(variant.isVararg);

                    if (variant.isVararg)
                    {
                        var method = variant.varargMethods[0];
                        // Debug.Log($"varargMethods {method}");
                        WriteCSMethodBinding(method, argc, true);
                    }
                    else
                    {
                        var method = variant.plainMethods[0];
                        // Debug.Log($"plainMethods {method}");
                        WriteCSMethodBinding(method, argc, false);
                    }
                }
            }
        }
コード例 #2
0
        protected void WriteTSAllVariants(MethodBaseBindingInfo <T> bindingInfo)
        {
            var variants = bindingInfo.variants;

            //TODO: 如果产生了无法在 typescript 中声明的方法, 则作标记, 并输出一条万能声明
            //      [key: string]: any
            foreach (var variantKV in variants)
            {
                foreach (var method in variantKV.Value.plainMethods)
                {
                    WriteTSDeclaration(method, bindingInfo);
                }
                foreach (var method in variantKV.Value.varargMethods)
                {
                    WriteTSDeclaration(method, bindingInfo);
                }
            }
        }
コード例 #3
0
        protected List <ParameterInfo> WriteTSDeclaration(T method, MethodBaseBindingInfo <T> bindingInfo)
        {
            var    isExtension   = method.IsDefined(typeof(System.Runtime.CompilerServices.ExtensionAttribute));
            var    refParameters = new List <ParameterInfo>();
            string tsMethodDeclaration;

            if (this.cg.bindingManager.GetTSMethodDeclaration(method, out tsMethodDeclaration))
            {
                this.cg.tsDeclare.AppendLine(tsMethodDeclaration);
                return(refParameters);
            }
            //TODO: 需要处理参数类型归并问题, 因为如果类型没有导入 ts 中, 可能会在声明中出现相同参数列表的定义
            //      在 MethodVariant 中创建每个方法对应的TS类型名参数列表, 完全相同的不再输出
            this.cg.AppendJSDoc(method);
            var prefix = "";

            if (method.IsStatic && !isExtension)
            {
                prefix = "static ";
            }
            string tsMethodRename;

            if (this.cg.bindingManager.GetTSMethodRename(method, out tsMethodRename))
            {
                this.cg.tsDeclare.Append($"{prefix}{tsMethodRename}(");
            }
            else
            {
                this.cg.tsDeclare.Append($"{prefix}{bindingInfo.regName}(");
            }
            var parameters = method.GetParameters();

            if (isExtension)
            {
                ArrayUtility.RemoveAt(ref parameters, 0);
            }
            for (var i = 0; i < parameters.Length; i++)
            {
                var parameter        = parameters[i];
                var parameter_prefix = "";
                var parameterType    = parameter.ParameterType;
                if (parameter.IsOut && parameterType.IsByRef)
                {
                    // parameter_prefix = "/*out*/ ";
                    refParameters.Add(parameter);
                }
                else if (parameterType.IsByRef)
                {
                    // parameter_prefix = "/*ref*/ ";
                    refParameters.Add(parameter);
                }
                if (parameter.IsDefined(typeof(ParamArrayAttribute), false) && i == parameters.Length - 1)
                {
                    var elementType      = parameterType.GetElementType();
                    var elementTS        = this.cg.bindingManager.GetTSTypeFullName(elementType);
                    var parameterVarName = BindingManager.GetTSVariable(parameter.Name);
                    this.cg.tsDeclare.AppendL($"{parameter_prefix}...{parameterVarName}: {elementTS}[]");
                }
                else
                {
                    var parameterTS      = this.cg.bindingManager.GetTSTypeFullName(parameterType, parameter.IsOut);
                    var parameterVarName = BindingManager.GetTSVariable(parameter.Name);
                    this.cg.tsDeclare.AppendL($"{parameter_prefix}{parameterVarName}: {parameterTS}");
                }
                if (i != parameters.Length - 1)
                {
                    this.cg.tsDeclare.AppendL(", ");
                }
            }
            this.cg.tsDeclare.AppendL($")");
            WriteTSReturn(method, refParameters);
            return(refParameters);
        }