From 5e30f1d0b1ecd85e93a02895c6cb56df497482f0 Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Wed, 26 Nov 2025 18:57:56 +1000 Subject: [PATCH] Load analyzers in separate ALCs --- .../ProjectLoader/CustomMsBuildProjectLoader.Worker.cs | 9 ++++++++- .../Features/Analysis/RoslynAnalysisTests.cs | 5 ++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/SharpIDE.Application/Features/Analysis/ProjectLoader/CustomMsBuildProjectLoader.Worker.cs b/src/SharpIDE.Application/Features/Analysis/ProjectLoader/CustomMsBuildProjectLoader.Worker.cs index 3444967..273cc15 100644 --- a/src/SharpIDE.Application/Features/Analysis/ProjectLoader/CustomMsBuildProjectLoader.Worker.cs +++ b/src/SharpIDE.Application/Features/Analysis/ProjectLoader/CustomMsBuildProjectLoader.Worker.cs @@ -415,8 +415,15 @@ public partial class CustomMsBuildProjectLoader } } } + var analyzerReferences = commandLineArgs.ResolveAnalyzerReferences(analyzerLoader).Distinct(Microsoft.CodeAnalysis.MSBuild.MSBuildProjectLoader.Worker.AnalyzerReferencePathComparer.Instance); - return commandLineArgs.ResolveAnalyzerReferences(analyzerLoader).Distinct(Microsoft.CodeAnalysis.MSBuild.MSBuildProjectLoader.Worker.AnalyzerReferencePathComparer.Instance); + var isolatedReferences = IsolatedAnalyzerReferenceSet.CreateIsolatedAnalyzerReferencesAsync( + useAsync: false, + analyzerReferences.ToImmutableArray(), + _solutionServices, + CancellationToken.None).VerifyCompleted(); + + return isolatedReferences; } private ImmutableArray CreateDocumentInfos(IReadOnlyList documentFileInfos, ProjectId projectId, Encoding? encoding) diff --git a/tests/SharpIDE.Application.IntegrationTests/Features/Analysis/RoslynAnalysisTests.cs b/tests/SharpIDE.Application.IntegrationTests/Features/Analysis/RoslynAnalysisTests.cs index 6e6678a..003edc5 100644 --- a/tests/SharpIDE.Application.IntegrationTests/Features/Analysis/RoslynAnalysisTests.cs +++ b/tests/SharpIDE.Application.IntegrationTests/Features/Analysis/RoslynAnalysisTests.cs @@ -35,13 +35,16 @@ public class RoslynAnalysisTests var solutionModel = await VsPersistenceMapper.GetSolutionModel(@"C:\Users\Matthew\Documents\Git\SharpIDE\SharpIDE.sln", TestContext.Current.CancellationToken); var sharpIdeApplicationProject = solutionModel.AllProjects.Single(p => p.Name == "SharpIDE.Application"); + var timer = Stopwatch.StartNew(); roslynAnalysis._solutionLoadedTcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); await roslynAnalysis.LoadSolutionInWorkspace(solutionModel, TestContext.Current.CancellationToken); + timer.Stop(); + _testOutputHelper.WriteLine($"Solution load: {timer.ElapsedMilliseconds} ms"); // Act foreach (var i in Enumerable.Range(0, 3)) { - var timer = Stopwatch.StartNew(); + timer.Restart(); await roslynAnalysis.GetProjectDiagnostics(sharpIdeApplicationProject, TestContext.Current.CancellationToken); timer.Stop(); _testOutputHelper.WriteLine($"Diagnostics: {timer.ElapsedMilliseconds.ToString()}ms");