public static void IfHasAttribute <TAttribute>(this MemberInfo memberInfo, Action <TAttribute> action)
     where TAttribute : Attribute
 {
     memberInfo.AssertNotNull(nameof(memberInfo));
     action.AssertParameterNotNull(nameof(action));
     foreach (var attr in memberInfo.GetCustomAttributes <TAttribute>(true))
     {
         action(attr);
     }
 }
Beispiel #2
0
        public static Type GetFieldOrPropertyType(this MemberInfo member)
        {
            member.AssertNotNull();

            if (member is FieldInfo)
            {
                return(((FieldInfo)member).FieldType);
            }
            if (member is PropertyInfo)
            {
                return(((PropertyInfo)member).PropertyType);
            }

            throw new Exception($"{nameof(member)} must be either {nameof(FieldInfo)} or {nameof(PropertyInfo)}!");
        }
Beispiel #3
0
        public static object GetFieldOrPropertyValue(this MemberInfo member, object obj)
        {
            member.AssertNotNull();

            if (member is FieldInfo)
            {
                return(((FieldInfo)member).GetValue(obj));
            }
            if (member is PropertyInfo)
            {
                return(((PropertyInfo)member).GetValue(obj));
            }

            throw new Exception($"{nameof(member)} must be either {nameof(FieldInfo)} or {nameof(PropertyInfo)}!");
        }
        public static void IfHasSingleAttribute <TAttribute>(this MemberInfo memberInfo, Action <TAttribute> action)
            where TAttribute : Attribute
        {
            memberInfo.AssertNotNull(nameof(memberInfo));
            action.AssertParameterNotNull(nameof(action));
            var attributes = memberInfo.GetCustomAttributes <TAttribute>(true);

            if (attributes.Count() == 1)
            {
                action(attributes.Single());
            }
            else if (attributes.Count() > 1)
            {
                throw new InvalidOperationException($"Error : Member {memberInfo.Name} has multiple attributes of the following type.");
            }
        }
Beispiel #5
0
        public static Visibility Visibility(this MemberInfo mi)
        {
            mi.AssertNotNull();
            if (mi is Type)
            {
                var t = mi.AssertCast <Type>();
                if (t.IsNested)
                {
                    if (t.IsNestedPublic)
                    {
                        return(Reflection.Visibility.Public);
                    }
                    if (t.IsNestedFamORAssem)
                    {
                        return(Reflection.Visibility.FamilyOrAssembly);
                    }
                    if (t.IsNestedFamily)
                    {
                        return(Reflection.Visibility.Family);
                    }
                    if (t.IsNestedAssembly)
                    {
                        return(Reflection.Visibility.Assembly);
                    }
                    if (t.IsNestedFamANDAssem)
                    {
                        return(Reflection.Visibility.FamilyAndAssembly);
                    }
                    if (t.IsNestedPrivate)
                    {
                        return(Reflection.Visibility.Private);
                    }
                    throw AssertionHelper.Fail();
                }
                else
                {
                    if (t.IsPublic)
                    {
                        return(Reflection.Visibility.Public);
                    }
                    return(Reflection.Visibility.Assembly);
                }
            }
            else if (mi is FieldInfo)
            {
                var fi = mi.AssertCast <FieldInfo>();
                if (fi.IsPublic)
                {
                    return(Reflection.Visibility.Public);
                }
                if (fi.IsFamilyOrAssembly)
                {
                    return(Reflection.Visibility.FamilyOrAssembly);
                }
                if (fi.IsFamily)
                {
                    return(Reflection.Visibility.Family);
                }
                if (fi.IsAssembly)
                {
                    return(Reflection.Visibility.Assembly);
                }
                if (fi.IsFamilyAndAssembly)
                {
                    return(Reflection.Visibility.FamilyAndAssembly);
                }
                if (fi.IsPrivate)
                {
                    return(Reflection.Visibility.Private);
                }
                throw AssertionHelper.Fail();
            }
            else if (mi is MethodBase)
            {
                var mb = mi.AssertCast <MethodBase>();
                if (mb.IsPublic)
                {
                    return(Reflection.Visibility.Public);
                }
                if (mb.IsFamilyOrAssembly)
                {
                    return(Reflection.Visibility.FamilyOrAssembly);
                }
                if (mb.IsFamily)
                {
                    return(Reflection.Visibility.Family);
                }
                if (mb.IsAssembly)
                {
                    return(Reflection.Visibility.Assembly);
                }
                if (mb.IsFamilyAndAssembly)
                {
                    return(Reflection.Visibility.FamilyAndAssembly);
                }
                if (mb.IsPrivate)
                {
                    return(Reflection.Visibility.Private);
                }
                throw AssertionHelper.Fail();
            }
            else if (mi is PropertyInfo)
            {
                var pi     = mi.AssertCast <PropertyInfo>();
                var getter = pi.CanRead ? null : pi.GetGetMethod(true);
                var setter = pi.CanRead ? null : pi.GetGetMethod(true);

                if (getter == null || setter == null)
                {
                    throw AssertionHelper.Fail();
                }
                else if (getter == null || setter == null)
                {
                    return((getter ?? setter).Visibility());
                }
                else
                {
                    var g_vis = getter.Visibility();
                    var s_vis = setter.Visibility();
                    return((Visibility)Math.Max((int)g_vis, (int)s_vis));
                }
            }
            else
            {
                throw AssertionHelper.Fail();
            }
        }
 public static bool HasAttribute <TAttribute>(this MemberInfo memberInfo)
     where TAttribute : Attribute
 {
     memberInfo.AssertNotNull(nameof(memberInfo));
     return(memberInfo.GetCustomAttributes <TAttribute>(true).Any());
 }