1using System.Collections.Immutable;
2using System.Composition;
4using System.Threading.Tasks;
13 [ExportCodeFixProvider(LanguageNames.CSharp)]
18 public override ImmutableArray<string>
FixableDiagnosticIds => ImmutableArray.Create(Constants.AnalyzerIdentifiers.IsOperationMethodPublic);
20 public sealed
override FixAllProvider
GetFixAllProvider() => WellKnownFixAllProviders.BatchFixer;
24 var root = await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(
false);
26 context.CancellationToken.ThrowIfCancellationRequested();
28 var diagnostic = context.Diagnostics.First();
29 var methodNode = root.FindNode(diagnostic.Location.SourceSpan) as MethodDeclarationSyntax;
31 context.CancellationToken.ThrowIfCancellationRequested();
34 context, root, methodNode, SyntaxKind.PrivateKeyword,
35 IsOperationMethodPublicAnalyzerMakeNonPublicCodeFixConstants.PrivateDescription, diagnostic);
37 context, root, methodNode, SyntaxKind.InternalKeyword,
38 IsOperationMethodPublicAnalyzerMakeNonPublicCodeFixConstants.InternalDescription, diagnostic);
40 var isSealed =
bool.Parse(diagnostic.Properties[IsOperationMethodPublicAnalyzerConstants.IsSealed]);
45 context, root, methodNode, SyntaxKind.ProtectedKeyword,
46 IsOperationMethodPublicAnalyzerMakeNonPublicCodeFixConstants.ProtectedDescription, diagnostic);
50 private static void RegisterNewCodeFix(CodeFixContext context, SyntaxNode root, MethodDeclarationSyntax methodNode,
51 SyntaxKind visibility,
string description, Diagnostic diagnostic)
53 var publicModifier = methodNode.Modifiers.Where(_ => _.IsKind(SyntaxKind.PublicKeyword)).First();
54 var visibilityNode = SyntaxFactory.Token(publicModifier.LeadingTrivia, visibility,
55 publicModifier.TrailingTrivia);
56 var modifiers = methodNode.Modifiers.Replace(publicModifier, visibilityNode);
57 var newwMethodNode = methodNode.WithModifiers(modifiers);
58 var newRoot = root.ReplaceNode(methodNode, newwMethodNode);
60 context.RegisterCodeFix(
61 CodeAction.Create(description,
62 _ => Task.FromResult(context.Document.WithSyntaxRoot(newRoot)), description), diagnostic);
sealed override FixAllProvider GetFixAllProvider()
override async Task RegisterCodeFixesAsync(CodeFixContext context)
override ImmutableArray< string > FixableDiagnosticIds