public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context) { if (!Settings.IsCodeFixEnabled(CodeFixIdentifiers.ChangeAccessibility)) { return; } SyntaxNode root = await context.GetSyntaxRootAsync().ConfigureAwait(false); if (!TryFindFirstAncestorOrSelf( root, context.Span, out SyntaxNode node, predicate: f => OverrideInfo.CanCreate(f))) { return; } foreach (Diagnostic diagnostic in context.Diagnostics) { switch (diagnostic.Id) { case CompilerDiagnosticIdentifiers.CannotChangeAccessModifiersWhenOverridingInheritedMember: { SemanticModel semanticModel = await context.GetSemanticModelAsync().ConfigureAwait(false); OverrideInfo overrideInfo = OverrideInfo.Create(node, semanticModel, context.CancellationToken); if (!overrideInfo.Success) { break; } Accessibility newAccessibility = overrideInfo.OverriddenSymbol.DeclaredAccessibility; CodeAction codeAction = CodeAction.Create( $"Change accessibility to '{newAccessibility.GetName()}'", cancellationToken => { if (node.Kind() == SyntaxKind.VariableDeclarator) { node = node.Parent.Parent; } SyntaxNode newNode = node.WithAccessibility(newAccessibility, ModifierComparer.Instance); return(context.Document.ReplaceNodeAsync(node, newNode, cancellationToken)); }, GetEquivalenceKey(diagnostic)); context.RegisterCodeFix(codeAction, diagnostic); break; } } } }
public static void ChangeAccessibility( CodeFixContext context, Diagnostic diagnostic, SyntaxNode node, Accessibility accessibility) { if (!CSharpUtility.IsAllowedAccessibility(node, accessibility)) { return; } CodeAction codeAction = CodeAction.Create( $"Change accessibility to '{accessibility.GetName()}'", cancellationToken => ChangeAccessibilityRefactoring.RefactorAsync(context.Document, node, accessibility, cancellationToken), GetEquivalenceKey(diagnostic, accessibility.ToString())); context.RegisterCodeFix(codeAction, diagnostic); }
private static string GetTitle(Accessibility accessibility) { return($"Change accessibility to '{accessibility.GetName()}'"); }