public MemberValueNodeInfo(DmdMemberInfo member, byte inheritanceLevel) { Member = member; InheritanceLevel = inheritanceLevel; Flags = GetFlags(member); // The caller initializes it later Name = default; }
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(); } }
public void SetNeedCastAndNeedTypeName() => Flags |= MemberValueNodeInfoFlags.NeedCast | MemberValueNodeInfoFlags.NeedTypeName;