示例#1
0
        private static bool SupportIcallBind(TypeReference _type)
        {
            if (_type.Namespace.StartsWith("UnityEngine"))
            {
                if (IcallSupportClass.Contains(_type.Name))
                {
                    return(true);
                }
                var ct = _type.BaseType();
                while (ct != null)
                {
                    if (SupportIcallBind(ct))
                    {
                        return(true);
                    }

                    ct = ct.BaseType();
                }
            }
            return(false);
        }
示例#2
0
        public static bool Filter(TypeReference type)
        {
            if (DropTypes.Contains(type))
            {
                return(false);
            }

            foreach (var t in IgnoreTypeSet)
            {
                if (type.FullName.Contains(t))
                {
                    DropTypes.Add(type);
                    return(false);
                }
            }

            if (IsDelegate(type))
            {
                var tList = GetDelegateParams(type, null, out var rType);
                tList.Add(rType);
                foreach (var t in tList)
                {
                    if (t != null && !Utils.Filter(t))
                    {
                        DropTypes.Add(type);
                        return(false);
                    }
                }
            }

            if (type.IsGeneric() && !IsDelegate(type)) //
            {
                Log("ignorType: " + type.FullName);
                DropTypes.Add(type);
                return(false);
            }

            if (IsException(type))
            {
                Log("ignorType: " + type.FullName);
                DropTypes.Add(type);
                return(false);
            }

            if (type.IsArray)
            {
                DropTypes.Add(type);
                return(false);
            }

            if (IsAttribute(type))
            {
                DropTypes.Add(type);
                return(false);
            }



            var td = type.Resolve();

            if (td != null && IsObsolete(td) || td.IsInterface)
            {
                DropTypes.Add(type);
                return(false);
            }

            if (td != null && td.IsStruct())
            {
                foreach (var f in td.Fields)
                {
                    if (!f.IsStatic && !Utils.Filter(f.FieldType))
                    {
                        DropTypes.Add(type);
                        return(false);
                    }
                }
            }


            var ct = type.BaseType();

            while (ct != null)
            {
                if (!Filter(ct))
                {
                    DropTypes.Add(type);
                    return(false);
                }

                ct = ct.BaseType();
            }

            return(true);
        }