File: src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Helpers\RemoveUnnecessaryImports\CSharpUnnecessaryImportsProvider.cs
Web Access
Project: src\src\Workspaces\CSharp\Portable\Microsoft.CodeAnalysis.CSharp.Workspaces.csproj (Microsoft.CodeAnalysis.CSharp.Workspaces)
// 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.
 
using System;
using System.Collections.Immutable;
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.PooledObjects;
using Roslyn.Utilities;
 
namespace Microsoft.CodeAnalysis.RemoveUnnecessaryImports;
 
internal sealed class CSharpUnnecessaryImportsProvider
    : AbstractUnnecessaryImportsProvider<UsingDirectiveSyntax>
{
    public static readonly CSharpUnnecessaryImportsProvider Instance = new();
 
    private CSharpUnnecessaryImportsProvider()
    {
    }
 
    public override ImmutableArray<UsingDirectiveSyntax> GetUnnecessaryImports(
        SemanticModel model,
        Func<SyntaxNode, bool>? predicate,
        CancellationToken cancellationToken)
    {
        var root = model.SyntaxTree.GetRoot(cancellationToken);
        predicate ??= Functions<SyntaxNode>.True;
        var diagnostics = model.GetDiagnostics(cancellationToken: cancellationToken);
 
        using var _ = ArrayBuilder<UsingDirectiveSyntax>.GetInstance(out var result);
        foreach (var diagnostic in diagnostics)
        {
            if (diagnostic.Id == "CS8019" &&
                root.FindNode(diagnostic.Location.SourceSpan) is UsingDirectiveSyntax node && predicate(node))
            {
                result.Add(node);
            }
        }
 
        result.RemoveDuplicates();
        return result.ToImmutableArray();
    }
}