diff --git a/src/EditorFeatures/Test2/Diagnostics/DiagnosticServiceTests.vb b/src/EditorFeatures/Test2/Diagnostics/DiagnosticServiceTests.vb index 91c3d346c47ec..5a47f2cc52cb4 100644 --- a/src/EditorFeatures/Test2/Diagnostics/DiagnosticServiceTests.vb +++ b/src/EditorFeatures/Test2/Diagnostics/DiagnosticServiceTests.vb @@ -149,8 +149,7 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.Diagnostics.UnitTests Assert.Equal(workspaceDiagnosticAnalyzer.DiagDescriptor.Id, descriptors(0).Id) ' Add an existing workspace analyzer to the project, ensure no duplicate diagnostics. - Dim duplicateProjectAnalyzersReference = hostAnalyzers.GetHostAnalyzerReferencesMap().First().Value - project = project.WithAnalyzerReferences({duplicateProjectAnalyzersReference}) + project = project.WithAnalyzerReferences(hostAnalyzers.HostAnalyzerReferences) ' Verify duplicate descriptors or diagnostics. descriptorsMap = hostAnalyzers.GetDiagnosticDescriptorsPerReference(diagnosticService.AnalyzerInfoCache, project) diff --git a/src/Features/Core/Portable/Diagnostics/EngineV2/DiagnosticIncrementalAnalyzer.StateManager.HostStates.cs b/src/Features/Core/Portable/Diagnostics/EngineV2/DiagnosticIncrementalAnalyzer.StateManager.HostStates.cs index af1fe1edd92ab..fe8be59046e32 100644 --- a/src/Features/Core/Portable/Diagnostics/EngineV2/DiagnosticIncrementalAnalyzer.StateManager.HostStates.cs +++ b/src/Features/Core/Portable/Diagnostics/EngineV2/DiagnosticIncrementalAnalyzer.StateManager.HostStates.cs @@ -16,10 +16,10 @@ private partial class StateManager { public IEnumerable GetAllHostStateSets() { - var analyzerReferencesMap = _workspace.CurrentSolution.State.Analyzers.GetHostAnalyzerReferencesMap(); + var analyzerReferences = _workspace.CurrentSolution.State.Analyzers.HostAnalyzerReferences; foreach (var (key, value) in _hostAnalyzerStateMap) { - if (key.AnalyzerReferences == analyzerReferencesMap) + if (key.AnalyzerReferences == analyzerReferences) { foreach (var stateSet in value.OrderedStateSets) { @@ -31,7 +31,7 @@ public IEnumerable GetAllHostStateSets() private HostAnalyzerStateSets GetOrCreateHostStateSets(Project project, ProjectAnalyzerStateSets projectStateSets) { - var key = new HostAnalyzerStateSetKey(project.Language, project.Solution.State.Analyzers.GetHostAnalyzerReferencesMap()); + var key = new HostAnalyzerStateSetKey(project.Language, project.Solution.State.Analyzers.HostAnalyzerReferences); var hostStateSets = ImmutableInterlocked.GetOrAdd(ref _hostAnalyzerStateMap, key, CreateLanguageSpecificAnalyzerMap, project.Solution.State.Analyzers); return hostStateSets.WithExcludedAnalyzers(projectStateSets.SkippedAnalyzersInfo.SkippedAnalyzers); diff --git a/src/Features/Core/Portable/Diagnostics/EngineV2/DiagnosticIncrementalAnalyzer.StateManager.cs b/src/Features/Core/Portable/Diagnostics/EngineV2/DiagnosticIncrementalAnalyzer.StateManager.cs index 1cd6f957c6a29..8cd11d6a45737 100644 --- a/src/Features/Core/Portable/Diagnostics/EngineV2/DiagnosticIncrementalAnalyzer.StateManager.cs +++ b/src/Features/Core/Portable/Diagnostics/EngineV2/DiagnosticIncrementalAnalyzer.StateManager.cs @@ -314,14 +314,14 @@ private void VerifyProjectDiagnosticStates(IEnumerable stateSets) private readonly struct HostAnalyzerStateSetKey : IEquatable { - public HostAnalyzerStateSetKey(string language, ImmutableDictionary analyzerReferences) + public HostAnalyzerStateSetKey(string language, IReadOnlyList analyzerReferences) { Language = language; AnalyzerReferences = analyzerReferences; } public string Language { get; } - public ImmutableDictionary AnalyzerReferences { get; } + public IReadOnlyList AnalyzerReferences { get; } public bool Equals(HostAnalyzerStateSetKey other) => Language == other.Language && AnalyzerReferences == other.AnalyzerReferences; diff --git a/src/Workspaces/Core/Portable/Diagnostics/HostDiagnosticAnalyzers.cs b/src/Workspaces/Core/Portable/Diagnostics/HostDiagnosticAnalyzers.cs index ea6e57536778b..70d8c63279ca1 100644 --- a/src/Workspaces/Core/Portable/Diagnostics/HostDiagnosticAnalyzers.cs +++ b/src/Workspaces/Core/Portable/Diagnostics/HostDiagnosticAnalyzers.cs @@ -53,8 +53,9 @@ internal sealed class HostDiagnosticAnalyzers /// private readonly ConditionalWeakTable, StrongBox>> _skippedHostAnalyzers; - internal HostDiagnosticAnalyzers(IEnumerable hostAnalyzerReferences) + internal HostDiagnosticAnalyzers(IReadOnlyList hostAnalyzerReferences) { + HostAnalyzerReferences = hostAnalyzerReferences; _hostAnalyzerReferencesMap = CreateAnalyzerReferencesMap(hostAnalyzerReferences); _hostDiagnosticAnalyzersPerLanguageMap = new ConcurrentDictionary>>(concurrencyLevel: 2, capacity: 2); _lazyHostDiagnosticAnalyzersPerReferenceMap = new Lazy>>(() => CreateDiagnosticAnalyzersPerReferenceMap(_hostAnalyzerReferencesMap), isThreadSafe: true); @@ -64,10 +65,9 @@ internal HostDiagnosticAnalyzers(IEnumerable hostAnalyzerRefe } /// - /// It returns a map with as key and as value + /// List of host s /// - public ImmutableDictionary GetHostAnalyzerReferencesMap() - => _hostAnalyzerReferencesMap; + public IReadOnlyList HostAnalyzerReferences { get; } /// /// Get identity and s map for given