示例#1
0
        protected void GenMethods()
        {
            var flags = BindingFlags.Public | BindingFlags.Static | BindingFlags.IgnoreCase | BindingFlags.Instance |
                        BindingFlags.DeclaredOnly;
            Dictionary <string, MethodDataSet> allMethods      = new Dictionary <string, MethodDataSet>();
            Action <MethodInfo, bool>          methodCollector = (mi, isExtend) =>
            {
                MethodDataSet set;
                if (allMethods.TryGetValue(mi.Name, out set))
                {
                    set.Add(mi, isExtend);
                }
                else
                {
                    set = new MethodDataSet();
                    set.Add(mi, isExtend);
                    allMethods.Add(mi.Name, set);
                }
            };

            //extend
            if (_bindType.extendList != null)
            {
                foreach (var type in _bindType.extendList)
                {
                    MethodInfo[] methodInfos = type.GetMethods(flags);
                    var          extFilter   = new GeneralFilter <MethodInfo>(methodInfos)
                                               .Exclude(methodExcludeFilter)
                                               .And(new ExtendMethodFilter(_bindType.type));
                    extFilter.Each(mi =>
                    {
                        methodCollector(mi, true);
                    });
                }
            }

            //base
            var methods      = _bindType.type.GetMethods(flags);
            var filter       = new GeneralFilter <MethodInfo>(methods);
            var methodFilter = filter.Exclude(methodExcludeFilter);

            methodFilter.Each(mi =>
            {
                methodCollector(mi, false);
            });

            foreach (var pair in allMethods)
            {
                GenMethod(pair.Key, pair.Value);
            }
        }
示例#2
0
 protected override void GenMethod(string name, MethodDataSet methodDataSet)
 {
     //overload
     if (methodDataSet.MethodList.Count > 1)
     {
         for (var j = 1; j < methodDataSet.MethodList.Count; j++)
         {
             var      data       = methodDataSet.MethodList [j];
             var      mi         = data.Method;
             var      parameters = mi.GetParameters();
             int      startIdx   = data.IsExtend ? 1 : 0;
             string[] paramNames = new string[parameters.Length - startIdx];
             for (var i = startIdx; i < parameters.Length; i++)
             {
                 var    pi     = parameters [i];
                 string piName = GetParamName(pi.Name);
                 paramNames [i - startIdx] = string.Format("{0}:{1}", piName, pi.ParameterType.GetTypeStr());
             }
             _methodBuilder.AppendFormat("---@overload fun({0}):{1}\n", string.Join(", ", paramNames), mi.ReturnType.GetTypeStr());
         }
     }
     //main
     {
         var      data       = methodDataSet.MethodList [0];
         var      mi         = data.Method;
         var      parameters = mi.GetParameters();
         int      startIdx   = data.IsExtend ? 1 : 0;
         string[] paramNames = new string[parameters.Length - startIdx];
         for (var i = startIdx; i < parameters.Length; i++)
         {
             var    pi     = parameters [i];
             string piName = GetParamName(pi.Name);
             _methodBuilder.AppendFormat("---@param {0} {1}\n", piName, pi.ParameterType.GetTypeStr());
             paramNames [i - startIdx] = piName;
         }
         var returnType = mi.ReturnType;
         if (typeof(void) != returnType)
         {
             _methodBuilder.AppendFormat("---@return {0}\n", returnType.GetTypeStr());
         }
         string c = mi.IsStatic && !data.IsExtend ? "." : ":";
         _methodBuilder.AppendFormat("function m{0}{1}({2}) end\n", c, mi.Name, string.Join(", ", paramNames));
     }
 }
 protected abstract void GenMethod(string name, MethodDataSet methodDataSet);