| File: CodeFixes\Suppression\AbstractSuppressionCodeFixProvider.RemoveSuppressionCodeAction_Attribute.cs | Web Access |
| Project: src\roslyn\src\Features\Core\Portable\Microsoft.CodeAnalysis.Features.csproj (Microsoft.CodeAnalysis.Features) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. #nullable disable using System; using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis.Editing; namespace Microsoft.CodeAnalysis.CodeFixes.Suppression; internal abstract partial class AbstractSuppressionCodeFixProvider : IConfigurationFixProvider { internal abstract partial class RemoveSuppressionCodeAction { /// <summary> /// Code action to remove suppress message attributes for remove suppression. /// </summary> private sealed class AttributeRemoveAction : RemoveSuppressionCodeAction { private readonly Project _project; private readonly AttributeData _attribute; public static AttributeRemoveAction Create( AttributeData attribute, Project project, Diagnostic diagnostic, AbstractSuppressionCodeFixProvider fixer) { return new AttributeRemoveAction(attribute, project, diagnostic, fixer); } private AttributeRemoveAction( AttributeData attribute, Project project, Diagnostic diagnostic, AbstractSuppressionCodeFixProvider fixer, bool forFixMultipleContext = false) : base(diagnostic, fixer, forFixMultipleContext) { _project = project; _attribute = attribute; } public override RemoveSuppressionCodeAction CloneForFixMultipleContext() => new AttributeRemoveAction(_attribute, _project, _diagnostic, Fixer, forFixMultipleContext: true); public override SyntaxTree SyntaxTreeToModify => _attribute.ApplicationSyntaxReference.SyntaxTree; public async Task<SyntaxNode> GetAttributeToRemoveAsync(CancellationToken cancellationToken) { var attributeNode = await _attribute.ApplicationSyntaxReference.GetSyntaxAsync(cancellationToken).ConfigureAwait(false); return Fixer.IsSingleAttributeInAttributeList(attributeNode) ? attributeNode.Parent : attributeNode; } protected override async Task<Solution> GetChangedSolutionAsync( IProgress<CodeAnalysisProgress> progress, CancellationToken cancellationToken) { var attributeNode = await GetAttributeToRemoveAsync(cancellationToken).ConfigureAwait(false); var documentWithAttribute = _project.GetDocument(attributeNode.SyntaxTree); if (documentWithAttribute == null) { return _project.Solution; } var editor = await DocumentEditor.CreateAsync(documentWithAttribute, cancellationToken).ConfigureAwait(false); editor.RemoveNode(attributeNode); return editor.GetChangedDocument().Project.Solution; } } } }