CodeAction GetActionForLevel(RefactoringContext context, string accessName, Modifiers access, EntityDeclaration node, AstNode selectedNode)
        {
            return(new CodeAction(context.TranslateString("To " + accessName), script => {
                Modifiers newModifiers = node.Modifiers;
                newModifiers &= ~Modifiers.VisibilityMask;

                if (!(node is Accessor) || access != (node.GetParent <EntityDeclaration>().Modifiers & Modifiers.VisibilityMask))
                {
                    //Do not add access modifier for accessors if the new access level is the same as the parent
                    //That is, in public int X { $private get; } if access == public, then the result should not have the modifier
                    newModifiers |= access;
                }

                script.ChangeModifier(node, newModifiers);
            }, selectedNode));
        }
        static Modifiers GetActualAccess(AstNode parentTypeDeclaration, EntityDeclaration node)
        {
            Modifiers nodeAccess = node.Modifiers & Modifiers.VisibilityMask;

            if (nodeAccess == Modifiers.None && node is Accessor)
            {
                EntityDeclaration parent = node.GetParent <EntityDeclaration>();

                nodeAccess = parent.Modifiers & Modifiers.VisibilityMask;
            }

            if (nodeAccess == Modifiers.None)
            {
                if (parentTypeDeclaration == null)
                {
                    return(Modifiers.Internal);
                }
                return(Modifiers.Private);
            }

            return(nodeAccess & Modifiers.VisibilityMask);
        }