diff --git a/src/SharpIDE.Application/DependencyInjection.cs b/src/SharpIDE.Application/DependencyInjection.cs index 7a73044..2c4d35b 100644 --- a/src/SharpIDE.Application/DependencyInjection.cs +++ b/src/SharpIDE.Application/DependencyInjection.cs @@ -34,6 +34,7 @@ public static class DependencyInjection services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddLogging(); return services; } } diff --git a/src/SharpIDE.Application/Features/Analysis/RoslynAnalysis.cs b/src/SharpIDE.Application/Features/Analysis/RoslynAnalysis.cs index db22765..71e7cc3 100644 --- a/src/SharpIDE.Application/Features/Analysis/RoslynAnalysis.cs +++ b/src/SharpIDE.Application/Features/Analysis/RoslynAnalysis.cs @@ -56,7 +56,7 @@ public class RoslynAnalysis(ILogger logger, BuildService buildSe // Primarily used for getting the globs for a project private Dictionary _projectFileInfoMap = new(); - private TaskCompletionSource _solutionLoadedTcs = null!; + public TaskCompletionSource _solutionLoadedTcs = null!; private SharpIdeSolutionModel? _sharpIdeSolutionModel; public void StartSolutionAnalysis(SharpIdeSolutionModel solutionModel) { @@ -66,6 +66,7 @@ public class RoslynAnalysis(ILogger logger, BuildService buildSe try { await Analyse(solutionModel); + await UpdateSolutionDiagnostics(); } catch (Exception e) { @@ -148,7 +149,6 @@ public class RoslynAnalysis(ILogger logger, BuildService buildSe // _codeRefactoringProviders.AddRange(refactoringProviders); // } - await UpdateSolutionDiagnostics(cancellationToken); // foreach (var project in solution.Projects) // { // // foreach (var document in project.Documents) diff --git a/tests/SharpIDE.Application.UnitTests/Features/Analysis/RoslynAnalysisTests.cs b/tests/SharpIDE.Application.UnitTests/Features/Analysis/RoslynAnalysisTests.cs new file mode 100644 index 0000000..5695afb --- /dev/null +++ b/tests/SharpIDE.Application.UnitTests/Features/Analysis/RoslynAnalysisTests.cs @@ -0,0 +1,50 @@ +using System.Diagnostics; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using SharpIDE.Application.Features.Analysis; +using SharpIDE.Application.Features.Build; +using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence; + +[assembly: CaptureConsole] + +namespace SharpIDE.Application.UnitTests.Features.Analysis; +public class RoslynAnalysisTests +{ + private readonly ITestOutputHelper _testOutputHelper; + + public RoslynAnalysisTests(ITestOutputHelper testOutputHelper) + { + _testOutputHelper = testOutputHelper; + SharpIdeMsbuildLocator.Register(); + } + + + [Fact] + public async Task GetProjectDiagnostics_NoSolutionChanges_IsSubsequentlyCheaper() + { + // Arrange + var serviceCollection = new ServiceCollection(); + serviceCollection.AddApplication(); + + var services = serviceCollection.BuildServiceProvider(); + var logger = services.GetRequiredService>(); + var buildService = services.GetRequiredService(); + + var roslynAnalysis = new RoslynAnalysis(logger, buildService); + + 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"); + + roslynAnalysis._solutionLoadedTcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + await roslynAnalysis.Analyse(solutionModel, TestContext.Current.CancellationToken); + + // Act + foreach (var i in Enumerable.Range(1, 3)) + { + var timer = Stopwatch.StartNew(); + await roslynAnalysis.GetProjectDiagnostics(sharpIdeApplicationProject, TestContext.Current.CancellationToken); + timer.Stop(); + _testOutputHelper.WriteLine($"Diagnostics: {timer.ElapsedMilliseconds.ToString()}ms"); + } + } +} diff --git a/tests/SharpIDE.Application.UnitTests/SharpIDE.Application.UnitTests.csproj b/tests/SharpIDE.Application.UnitTests/SharpIDE.Application.UnitTests.csproj index fa2f580..bd7721d 100644 --- a/tests/SharpIDE.Application.UnitTests/SharpIDE.Application.UnitTests.csproj +++ b/tests/SharpIDE.Application.UnitTests/SharpIDE.Application.UnitTests.csproj @@ -21,4 +21,8 @@ + + + + diff --git a/tests/SharpIDE.Application.UnitTests/UnitTest1.cs b/tests/SharpIDE.Application.UnitTests/UnitTest1.cs deleted file mode 100644 index 0979b63..0000000 --- a/tests/SharpIDE.Application.UnitTests/UnitTest1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace SharpIDE.Application.UnitTests; - -public class UnitTest1 -{ - [Fact] - public void Test1() - { - true.Should().BeTrue(); - } -}