Beispiel #1
0
 public MemberValueNodeInfo(DmdMemberInfo member, byte inheritanceLevel)
 {
     Member           = member;
     InheritanceLevel = inheritanceLevel;
     Flags            = GetFlags(member);
     // The caller initializes it later
     Name = default;
 }
Beispiel #2
0
        static MemberValueNodeInfoFlags GetInfoFlags(DmdMemberInfo member)
        {
            Debug.Assert(member.MemberType == DmdMemberTypes.Field || member.MemberType == DmdMemberTypes.Property);
            MemberValueNodeInfoFlags res = MemberValueNodeInfoFlags.None;

            switch (member.MemberType)
            {
            case DmdMemberTypes.Field:
                var field = ((DmdFieldInfo)member);
                if (field.IsPublic)
                {
                    res |= MemberValueNodeInfoFlags.Public;
                }
                else if ((field.IsPrivate || field.IsPrivateScope) && field.DeclaringType != field.ReflectedType)
                {
                    res |= MemberValueNodeInfoFlags.NeedCast;
                }
                return(res);

            case DmdMemberTypes.Property:
                var prop     = (DmdPropertyInfo)member;
                var accessor = prop.GetGetMethod(DmdGetAccessorOptions.All) ?? prop.GetSetMethod(DmdGetAccessorOptions.All);
                if (!(accessor is null))
                {
                    if (accessor.IsPublic)
                    {
                        res |= MemberValueNodeInfoFlags.Public;
                    }
                    else if ((accessor.IsPrivate || accessor.IsPrivateScope) && accessor.DeclaringType != accessor.ReflectedType)
                    {
                        res |= MemberValueNodeInfoFlags.NeedCast;
                    }
                }
                return(res);

            default:
                throw new InvalidOperationException();
            }
        }
Beispiel #3
0
 public void SetNeedCastAndNeedTypeName() => Flags |= MemberValueNodeInfoFlags.NeedCast | MemberValueNodeInfoFlags.NeedTypeName;