GetBase() статический приватный Метод

static private GetBase ( ICustomAttributeProvider obj ) : ICustomAttributeProvider
obj ICustomAttributeProvider
Результат ICustomAttributeProvider
Пример #1
0
        internal static bool IsDefined(ICustomAttributeProvider obj, Type attributeType, bool inherit)
        {
            if (attributeType == null)
            {
                throw new ArgumentNullException("attributeType");
            }
            if (MonoCustomAttrs.IsUserCattrProvider(obj))
            {
                return(obj.IsDefined(attributeType, inherit));
            }
            if (MonoCustomAttrs.IsDefinedInternal(obj, attributeType))
            {
                return(true);
            }
            object[] pseudoCustomAttributes = MonoCustomAttrs.GetPseudoCustomAttributes(obj, attributeType);
            if (pseudoCustomAttributes != null)
            {
                for (int i = 0; i < pseudoCustomAttributes.Length; i++)
                {
                    if (attributeType.IsAssignableFrom(pseudoCustomAttributes[i].GetType()))
                    {
                        return(true);
                    }
                }
            }
            ICustomAttributeProvider @base;

            return(inherit && (@base = MonoCustomAttrs.GetBase(obj)) != null && MonoCustomAttrs.IsDefined(@base, attributeType, inherit));
        }
Пример #2
0
        internal static object[] GetCustomAttributes(ICustomAttributeProvider obj, Type attributeType, bool inherit)
        {
            if (obj == null)
            {
                throw new ArgumentNullException("obj");
            }
            if (attributeType == null)
            {
                throw new ArgumentNullException("attributeType");
            }
            if (attributeType == typeof(MonoCustomAttrs))
            {
                attributeType = null;
            }
            object[] customAttributesBase = MonoCustomAttrs.GetCustomAttributesBase(obj, attributeType);
            if (!inherit && customAttributesBase.Length == 1)
            {
                object[] array;
                if (attributeType != null)
                {
                    if (attributeType.IsAssignableFrom(customAttributesBase[0].GetType()))
                    {
                        array    = (object[])Array.CreateInstance(attributeType, 1);
                        array[0] = customAttributesBase[0];
                    }
                    else
                    {
                        array = (object[])Array.CreateInstance(attributeType, 0);
                    }
                }
                else
                {
                    array    = (object[])Array.CreateInstance(customAttributesBase[0].GetType(), 1);
                    array[0] = customAttributesBase[0];
                }
                return(array);
            }
            if (attributeType != null && attributeType.IsSealed && inherit)
            {
                AttributeUsageAttribute attributeUsageAttribute = MonoCustomAttrs.RetrieveAttributeUsage(attributeType);
                if (!attributeUsageAttribute.Inherited)
                {
                    inherit = false;
                }
            }
            int       capacity  = (customAttributesBase.Length >= 16) ? 16 : customAttributesBase.Length;
            Hashtable hashtable = new Hashtable(capacity);
            ArrayList arrayList = new ArrayList(capacity);
            ICustomAttributeProvider customAttributeProvider = obj;
            int num = 0;

            do
            {
                foreach (object obj2 in customAttributesBase)
                {
                    Type type = obj2.GetType();
                    if (attributeType == null || attributeType.IsAssignableFrom(type))
                    {
                        MonoCustomAttrs.AttributeInfo attributeInfo = (MonoCustomAttrs.AttributeInfo)hashtable[type];
                        AttributeUsageAttribute       attributeUsageAttribute2;
                        if (attributeInfo != null)
                        {
                            attributeUsageAttribute2 = attributeInfo.Usage;
                        }
                        else
                        {
                            attributeUsageAttribute2 = MonoCustomAttrs.RetrieveAttributeUsage(type);
                        }
                        if ((num == 0 || attributeUsageAttribute2.Inherited) && (attributeUsageAttribute2.AllowMultiple || attributeInfo == null || (attributeInfo != null && attributeInfo.InheritanceLevel == num)))
                        {
                            arrayList.Add(obj2);
                        }
                        if (attributeInfo == null)
                        {
                            hashtable.Add(type, new MonoCustomAttrs.AttributeInfo(attributeUsageAttribute2, num));
                        }
                    }
                }
                if ((customAttributeProvider = MonoCustomAttrs.GetBase(customAttributeProvider)) != null)
                {
                    num++;
                    customAttributesBase = MonoCustomAttrs.GetCustomAttributesBase(customAttributeProvider, attributeType);
                }
            }while (inherit && customAttributeProvider != null);
            object[] array3;
            if (attributeType == null || attributeType.IsValueType)
            {
                array3 = (object[])Array.CreateInstance(typeof(Attribute), arrayList.Count);
            }
            else
            {
                array3 = (Array.CreateInstance(attributeType, arrayList.Count) as object[]);
            }
            arrayList.CopyTo(array3, 0);
            return(array3);
        }