コード例 #1
0
        protected static string GetMethodName(string dotName, System.Reflection.MethodInfo method, Type methodAtType, Dictionary <string, object> staticusenames, Dictionary <string, object> usenames)
        {
            if (method.IsSpecialName && method.Name.StartsWith("add_") && method.GetParameters().Length == 1 && IsDelegate(method.GetParameters()[0].ParameterType))
            {
                string eventname = method.Name.Substring(4);

                return(eventname + "_addEventListener");
            }
            else if (method.IsSpecialName && method.Name.StartsWith("remove_") && method.GetParameters().Length == 1 && IsDelegate(method.GetParameters()[0].ParameterType))
            {
                string eventname = method.Name.Substring(7);

                return(eventname + "_removeEventListener");
            }


            var members = methodAtType.GetMember(dotName);
            //***加上受保护的方法***
            var pmem = methodAtType.GetMember(dotName, BindingFlags.Instance | BindingFlags.NonPublic);
            List <MemberInfo> _tempmembers = new List <MemberInfo>();

            _tempmembers.AddRange(members);
            foreach (var item in pmem)
            {
                if (item is FieldInfo)
                {
                    if (((FieldInfo)item).IsFamily)
                    {
                        if (IsSkipMember(item))
                        {
                            continue;
                        }
                        if (IsSkipType(((FieldInfo)item).FieldType))
                        {
                            continue;
                        }

                        _tempmembers.Add(item);
                    }
                }
                else if (item is MethodInfo)
                {
                    if (((MethodInfo)item).IsFamily)
                    {
                        if (IsSkipMember(item))
                        {
                            continue;
                        }
                        if (InterfaceCreator.isMethodSkip((MethodInfo)item))
                        {
                            continue;
                        }
                        _tempmembers.Add(item);
                    }
                }
            }
            members = _tempmembers.ToArray();

            //var props = methodAtType.GetProperties();
            //bool isprop = false;
            //foreach (var item in props)
            //{
            //	if (Equals(method, item.GetGetMethod()))
            //	{
            //		isprop = true;
            //	}
            //	if (Equals(method, item.GetSetMethod()))
            //	{
            //		isprop = true;
            //	}
            //}

            //if (!isprop)
            {
                if (Char.IsLower(dotName[0]))
                {
                    List <System.Reflection.MemberInfo> temp = new List <System.Reflection.MemberInfo>();

                    var ms = methodAtType.GetMember(Char.ToUpper(dotName[0]) + dotName.Substring(1));
                    foreach (var item in ms)
                    {
                        if (item.MemberType != MemberTypes.NestedType)
                        {
                            temp.Add(item);
                        }
                    }

                    if (temp.Count > 0)
                    {
                        dotName = dotName + "".PadLeft(temp.Count, '_');
                    }
                }
            }

            if (methodAtType.IsInterface)
            {
                var extinterface = methodAtType.GetInterfaces();

                List <System.Reflection.MemberInfo> inheritmember = new List <System.Reflection.MemberInfo>();
                foreach (var item in extinterface)
                {
                    inheritmember.AddRange(item.GetMember(dotName));
                }

                if (inheritmember.Count > 0)
                {
                    inheritmember.AddRange(members);

                    members = inheritmember.ToArray();
                }
            }
            else
            {
                var basetype = methodAtType.BaseType;
                List <System.Reflection.MemberInfo> inheritmember = new List <System.Reflection.MemberInfo>();
                if (basetype != null)
                {
                    var inherit = basetype.GetMember(dotName);
                    inheritmember.AddRange(inherit);

                    //***继承的受保护的对象***
                    var pinherit = basetype.GetMember(dotName, BindingFlags.Instance | BindingFlags.NonPublic);
                    foreach (var item in pinherit)
                    {
                        if (item is FieldInfo)
                        {
                            if (((FieldInfo)item).IsFamily)
                            {
                                if (IsSkipMember(item))
                                {
                                    continue;
                                }
                                if (IsSkipType(((FieldInfo)item).FieldType))
                                {
                                    continue;
                                }

                                inheritmember.Add(item);
                            }
                        }
                        else if (item is MethodInfo)
                        {
                            if (((MethodInfo)item).IsFamily)
                            {
                                if (IsSkipMember(item))
                                {
                                    continue;
                                }
                                if (InterfaceCreator.isMethodSkip((MethodInfo)item))
                                {
                                    continue;
                                }
                                inheritmember.Add(item);
                            }
                        }
                    }

                    //***********************
                    basetype = basetype.BaseType;
                }

                if (inheritmember.Count > 0)
                {
                    inheritmember.AddRange(members);
                    members = inheritmember.ToArray();
                }
            }


            string ext = string.Empty;

            for (int i = 0; i < members.Length; i++)
            {
                var m = members[i];

                if (IsSkipMember(m))
                {
                    continue;
                }


                if (m is MethodBase)
                {
                    if (((MethodBase)m).IsStatic != method.IsStatic)
                    {
                        continue;
                    }
                }
                else if (m is PropertyInfo)
                {
                    PropertyInfo p = (PropertyInfo)m;
                    if (Equals(p.GetGetMethod(), method))
                    {
                        break;
                    }
                    if (Equals(p.GetSetMethod(), method))
                    {
                        break;
                    }
                }

                if (members[i].Equals(method))
                {
                    break;
                }
                else
                {
                    ext = ext + "_";
                }
            }



            string v = dotName.Substring(0, 1).ToLower() + dotName.Substring(1) + ext;

            if (dotName.Length > 1)
            {
                if (Char.IsUpper(dotName.Substring(1, 1)[0]))
                {
                    v = dotName + ext;
                }
            }



            while (as3keywords.ContainsKey(v))
            {
                v = v + "_";
            }

            if (method.IsStatic)
            {
                if (staticusenames != null)
                {
                    while (staticusenames.ContainsKey(v))
                    {
                        v = v + "_";
                    }
                }
            }
            else
            {
                if (usenames != null)
                {
                    while (usenames.ContainsKey(v))
                    {
                        v = v + "_";
                    }
                }
            }
            return(v);
        }