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