File: CompilerAnalyzerConfigOptionsProvider.cs
Web Access
Project: src\src\System.Windows.Forms.Analyzers.CSharp\tests\UnitTests\System.Windows.Forms.Analyzers.CSharp.Tests.csproj (System.Windows.Forms.Analyzers.CSharp.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Collections.Immutable;
using System.Diagnostics.CodeAnalysis;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Diagnostics;
 
namespace System.Windows.Forms.Analyzers.Tests;
 
// Borrowed from https://github.com/dotnet/roslyn/blob/main/src/Compilers/Core/Portable/DiagnosticAnalyzer/CompilerAnalyzerConfigOptionsProvider.cs
 
[ExcludeFromCodeCoverage]
internal sealed class CompilerAnalyzerConfigOptionsProvider : AnalyzerConfigOptionsProvider
{
    private readonly ImmutableDictionary<object, AnalyzerConfigOptions> _treeDict;
 
    public static CompilerAnalyzerConfigOptionsProvider Empty { get; }
        = new CompilerAnalyzerConfigOptionsProvider(
            ImmutableDictionary<object, AnalyzerConfigOptions>.Empty,
            CompilerAnalyzerConfigOptions.Empty);
 
    internal CompilerAnalyzerConfigOptionsProvider(
        ImmutableDictionary<object, AnalyzerConfigOptions> treeDict,
        AnalyzerConfigOptions globalOptions)
    {
        _treeDict = treeDict;
        GlobalOptions = globalOptions;
    }
 
    public override AnalyzerConfigOptions GlobalOptions { get; }
 
    public override AnalyzerConfigOptions GetOptions(SyntaxTree tree)
        => _treeDict.TryGetValue(tree, out var options) ? options : CompilerAnalyzerConfigOptions.Empty;
 
    public override AnalyzerConfigOptions GetOptions(AdditionalText textFile)
        => _treeDict.TryGetValue(textFile, out var options) ? options : CompilerAnalyzerConfigOptions.Empty;
 
    internal CompilerAnalyzerConfigOptionsProvider WithAdditionalTreeOptions(ImmutableDictionary<object, AnalyzerConfigOptions> treeDict)
        => new(_treeDict.AddRange(treeDict), GlobalOptions);
 
    internal CompilerAnalyzerConfigOptionsProvider WithGlobalOptions(AnalyzerConfigOptions globalOptions)
        => new(_treeDict, globalOptions);
}