public static AccessibilityFlags GetAllowedAccessibilityFlags(MemberDeclarationSelection selectedMembers, bool allowOverride = false) { if (selectedMembers.Count < 2) { return(AccessibilityFlags.None); } var allFlags = AccessibilityFlags.None; AccessibilityFlags allowedFlags = AccessibilityFlags.Public | AccessibilityFlags.Internal | AccessibilityFlags.Protected | AccessibilityFlags.Private; foreach (MemberDeclarationSyntax member in selectedMembers) { Accessibility accessibility = SyntaxInfo.AccessibilityInfo(member).Accessibility; if (accessibility == Accessibility.NotApplicable) { accessibility = member.GetDefaultExplicitAccessibility(); if (accessibility == Accessibility.NotApplicable) { return(AccessibilityFlags.None); } } AccessibilityFlags flag = accessibility.GetAccessibilityFlag(); switch (accessibility) { case Accessibility.Private: case Accessibility.Protected: case Accessibility.ProtectedAndInternal: case Accessibility.ProtectedOrInternal: case Accessibility.Internal: case Accessibility.Public: { allFlags |= flag; break; } default: { Debug.Fail(accessibility.ToString()); return(AccessibilityFlags.None); } } foreach (Accessibility accessibility2 in Accessibilities) { if (accessibility != accessibility2 && !CSharpUtility.IsAllowedAccessibility(member, accessibility2, allowOverride: allowOverride)) { allowedFlags &= ~accessibility2.GetAccessibilityFlag(); } } } switch (allFlags) { case AccessibilityFlags.Private: case AccessibilityFlags.Protected: case AccessibilityFlags.Internal: case AccessibilityFlags.Public: { allowedFlags &= ~allFlags; break; } } return(allowedFlags); }