Exemple #1
0
 /// <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;
     }
 }
Exemple #2
0
 /// <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;
     }
 }
Exemple #3
0
 /// <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));
 }
Exemple #4
0
 /// <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));
 }
Exemple #5
0
 /// <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;
 }
Exemple #6
0
 /// <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;
 }
Exemple #7
0
 /// <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);
 }
Exemple #8
0
 /// <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));
 }