/// <summary> /// Copy the visibility from source to target, taking different scopes into account. /// </summary> internal static void CopyVisibilityFrom(this INetMemberVisibility target, INetMemberVisibility source) { if (source.IsPublic) { target.IsPublic = true; } else if (source.IsPrivate) { target.IsPrivate = true; } else if (source.IsAssembly) { target.IsAssembly = true; } else if (source.IsFamilyAndAssembly) { target.IsFamilyAndAssembly = true; } else if (source.IsFamilyOrAssembly) { if (source.HasSameScope(target)) { target.IsFamilyOrAssembly = true; } else { target.IsFamily = true; } } else if (source.IsFamily) { target.IsFamily = true; } }
/// <summary> /// Reduce visibility from FamOrAssem to Assembly if declaring type is sealed. /// </summary> public static void LimitIfDeclaringTypeSealed(this INetMemberVisibility member, NetTypeDefinition declaringType) { if ((declaringType != null) && (declaringType.IsSealed) && member.IsFamilyOrAssembly) { member.IsAssembly = true; } }
/// <summary> /// Make sure that the visibility of the given member is limited by the visibility of the given type is that is in another scope. /// </summary> /// <returns>True if member has changed</returns> public static bool LimitVisibility(this INetMemberVisibility member, NetTypeReference type) { if (type == null) { return(false); } return(type.Accept(LimitVisibilityTypeVisitor.Instance, member)); }
/// <summary> /// Make sure that the visibility of the given type definition is high enough to be used in the signature of the given member. /// </summary> /// <returns>True if type has changed</returns> public static bool EnsureVisibility(this NetTypeReference type, INetMemberVisibility member) { if (type == null) { return(false); } return(type.Accept(EnsureVisibilityTypeVisitor.Instance, member)); }
/// <summary> /// Copy the visibility from source to target, taking different scopes into account. /// </summary> internal static void CopyVisibilityFrom(this INetMemberVisibility target, INetMemberVisibility source) { if (source.IsPublic) target.IsPublic = true; else if (source.IsPrivate) target.IsPrivate = true; else if (source.IsAssembly) target.IsAssembly = true; else if (source.IsFamilyAndAssembly) target.IsFamilyAndAssembly = true; else if (source.IsFamilyOrAssembly) { if (source.HasSameScope(target)) target.IsFamilyOrAssembly = true; else target.IsFamily = true; } else if (source.IsFamily) target.IsFamily = true; }
/// <summary> /// Do both members have the same visibility? /// This takes into account differences in scope related to "protected internal". /// </summary> internal static bool HasSameVisibility(this INetMemberVisibility member1, INetMemberVisibility member2) { if (member1.IsPublic) return member2.IsPublic; if (member1.IsPrivate) return member2.IsPrivate; if (member1.IsAssembly) return member2.IsAssembly; if (member1.IsFamilyAndAssembly) return member2.IsFamilyAndAssembly; if (member1.IsFamilyOrAssembly) { if (member1.HasSameScope(member2)) return member2.IsFamilyOrAssembly; return member2.IsFamily || member2.IsFamilyOrAssembly; } if (member1.IsFamily) { if (member1.HasSameScope(member2)) return member2.IsFamily; return member2.IsFamily || member2.IsFamilyOrAssembly; } return true; }
/// <summary> /// Do both members have the same visibility? /// This takes into account differences in scope related to "protected internal". /// </summary> internal static bool HasSameVisibility(this INetMemberVisibility member1, INetMemberVisibility member2) { if (member1.IsPublic) { return(member2.IsPublic); } if (member1.IsPrivate) { return(member2.IsPrivate); } if (member1.IsAssembly) { return(member2.IsAssembly); } if (member1.IsFamilyAndAssembly) { return(member2.IsFamilyAndAssembly); } if (member1.IsFamilyOrAssembly) { if (member1.HasSameScope(member2)) { return(member2.IsFamilyOrAssembly); } return(member2.IsFamily || member2.IsFamilyOrAssembly); } if (member1.IsFamily) { if (member1.HasSameScope(member2)) { return(member2.IsFamily); } return(member2.IsFamily || member2.IsFamilyOrAssembly); } return(true); }
/// <summary> /// Are this member and the given other member in the same scope? /// </summary> bool INetMemberVisibility.HasSameScope(INetMemberVisibility other) { return(other.HasSameScope(this)); }
/// <summary> /// Are this member and the given other member in the same scope? /// </summary> public bool HasSameScope(INetMemberVisibility other) { return (DeclaringType != null) && other.HasSameScope(DeclaringType); }
/// <summary> /// Are this member and the given other member in the same scope? /// </summary> public bool HasSameScope(INetMemberVisibility other) { return((DeclaringType != null) && other.HasSameScope(DeclaringType)); }