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);
        }