From 3ef17054516ce7abe24aca072bfa7a865676bb42 Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Wed, 13 Aug 2025 21:50:55 +1000 Subject: [PATCH] refactor --- .../Features/Analysis/RoslynAnalysis.cs | 21 ++++++++++++++++--- src/SharpIDE.Photino/Layout/MainLayout.razor | 2 +- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/SharpIDE.Application/Features/Analysis/RoslynAnalysis.cs b/src/SharpIDE.Application/Features/Analysis/RoslynAnalysis.cs index b268c0f..f39aefb 100644 --- a/src/SharpIDE.Application/Features/Analysis/RoslynAnalysis.cs +++ b/src/SharpIDE.Application/Features/Analysis/RoslynAnalysis.cs @@ -7,13 +7,28 @@ namespace SharpIDE.Application.Features.Analysis; public static class RoslynAnalysis { + private static MSBuildWorkspace? _workspace; + public static void StartSolutionAnalysis(string solutionFilePath) + { + _ = Task.Run(async () => + { + try + { + await Analyse(solutionFilePath); + } + catch (Exception e) + { + Console.WriteLine($"RoslynAnalysis: Error during analysis: {e}"); + } + }); + } public static async Task Analyse(string solutionFilePath) { Console.WriteLine($"RoslynAnalysis: Loading solution"); var timer = Stopwatch.StartNew(); - var workspace = MSBuildWorkspace.Create(); - workspace.WorkspaceFailed += (o, e) => throw new InvalidOperationException($"Workspace failed: {e.Diagnostic.Message}"); - var solution = await workspace.OpenSolutionAsync(solutionFilePath, new Progress()); + _workspace ??= MSBuildWorkspace.Create(); + _workspace.WorkspaceFailed += (o, e) => throw new InvalidOperationException($"Workspace failed: {e.Diagnostic.Message}"); + var solution = await _workspace.OpenSolutionAsync(solutionFilePath, new Progress()); timer.Stop(); Console.WriteLine($"RoslynAnalysis: Solution loaded in {timer.ElapsedMilliseconds}ms"); Console.WriteLine(); diff --git a/src/SharpIDE.Photino/Layout/MainLayout.razor b/src/SharpIDE.Photino/Layout/MainLayout.razor index 80d7eac..5babd1a 100644 --- a/src/SharpIDE.Photino/Layout/MainLayout.razor +++ b/src/SharpIDE.Photino/Layout/MainLayout.razor @@ -152,7 +152,7 @@ var solutionModel = await VsPersistenceMapper.GetSolutionModel(_solutionFilePath); _solutionModel = solutionModel; - await RoslynAnalysis.Analyse(_solutionFilePath); + RoslynAnalysis.StartSolutionAnalysis(_solutionFilePath); } private CancellationTokenSource? _cancellationTokenSource = null!;