Skip to content

Commit 0108bcc

Browse files
Make ProjectSnapshotManagerDispatcher an implementation detail and restrict access (#10291)
This is the final change to remove the ProjectSnapshotManagerDispatcher virus that has spread throughout Razor.
2 parents 097bb8d + a48c278 commit 0108bcc

File tree

35 files changed

+585
-685
lines changed

35 files changed

+585
-685
lines changed

src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/LanguageServer/RazorSemanticTokensBenchmark.cs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@ public class RazorSemanticTokensBenchmark : RazorLanguageServerBenchmarkBase
3939

4040
private Range Range { get; set; }
4141

42-
private ProjectSnapshotManagerDispatcher ProjectSnapshotManagerDispatcher { get; set; }
43-
4442
private string PagesDirectory { get; set; }
4543

4644
private string ProjectFilePath { get; set; }
@@ -90,17 +88,11 @@ public async Task RazorSemanticTokensRangeAsync()
9088
var cancellationToken = CancellationToken.None;
9189
var documentVersion = 1;
9290

93-
await UpdateDocumentAsync(documentVersion, DocumentSnapshot, cancellationToken).ConfigureAwait(false);
91+
VersionCache.TrackDocumentVersion(DocumentSnapshot, documentVersion);
9492

9593
await RazorSemanticTokenService.GetSemanticTokensAsync(DocumentContext, Range.ToLinePositionSpan(), colorBackground: false, Guid.Empty, cancellationToken: cancellationToken).ConfigureAwait(false);
9694
}
9795

98-
private async Task UpdateDocumentAsync(int newVersion, IDocumentSnapshot documentSnapshot, CancellationToken cancellationToken)
99-
{
100-
await ProjectSnapshotManagerDispatcher.RunAsync(
101-
() => VersionCache.TrackDocumentVersion(documentSnapshot, newVersion), cancellationToken).ConfigureAwait(false);
102-
}
103-
10496
[GlobalCleanup]
10597
public async Task CleanupServerAsync()
10698
{
@@ -121,7 +113,6 @@ private void EnsureServicesInitialized()
121113
var legend = new RazorSemanticTokensLegendService(capabilitiesService);
122114
RazorSemanticTokenService = languageServer.GetRequiredService<IRazorSemanticTokensInfoService>();
123115
VersionCache = languageServer.GetRequiredService<IDocumentVersionCache>();
124-
ProjectSnapshotManagerDispatcher = languageServer.GetRequiredService<ProjectSnapshotManagerDispatcher>();
125116
}
126117

127118
internal class TestRazorSemanticTokensInfoService : RazorSemanticTokensInfoService

src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/LanguageServer/RazorSemanticTokensRangeEndpointBenchmark.cs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ public class RazorSemanticTokensRangeEndpointBenchmark : RazorLanguageServerBenc
4242

4343
private Range Range { get; set; }
4444

45-
private ProjectSnapshotManagerDispatcher ProjectSnapshotManagerDispatcher { get; set; }
46-
4745
private string PagesDirectory { get; set; }
4846

4947
private string ProjectFilePath { get; set; }
@@ -90,8 +88,7 @@ public async Task InitializeRazorSemanticAsync()
9088
};
9189

9290
var documentVersion = 1;
93-
CancellationToken = CancellationToken.None;
94-
await UpdateDocumentAsync(documentVersion, DocumentSnapshot, CancellationToken).ConfigureAwait(false);
91+
VersionCache.TrackDocumentVersion(DocumentSnapshot, documentVersion);
9592

9693
var languageServer = RazorLanguageServer.GetInnerLanguageServerForTesting();
9794
RequestContext = new RazorRequestContext(DocumentContext, languageServer.GetLspServices(), "lsp/method", uri: null);
@@ -124,14 +121,6 @@ public async Task RazorSemanticTokensRangeEndpointRangesAsync()
124121
await SemanticTokensRangeEndpoint.HandleRequestAsync(request, RequestContext, CancellationToken);
125122
}
126123

127-
private async Task UpdateDocumentAsync(int newVersion, IDocumentSnapshot documentSnapshot,
128-
CancellationToken cancellationToken)
129-
{
130-
await ProjectSnapshotManagerDispatcher.RunAsync(
131-
() => VersionCache.TrackDocumentVersion(documentSnapshot, newVersion), cancellationToken)
132-
.ConfigureAwait(false);
133-
}
134-
135124
[GlobalCleanup]
136125
public async Task CleanupServerAsync()
137126
{
@@ -150,7 +139,6 @@ private void EnsureServicesInitialized()
150139
var languageServer = RazorLanguageServer.GetInnerLanguageServerForTesting();
151140
RazorSemanticTokenService = languageServer.GetRequiredService<IRazorSemanticTokensInfoService>();
152141
VersionCache = languageServer.GetRequiredService<IDocumentVersionCache>();
153-
ProjectSnapshotManagerDispatcher = languageServer.GetRequiredService<ProjectSnapshotManagerDispatcher>();
154142
}
155143

156144
internal class TestCustomizableRazorSemanticTokensInfoService : RazorSemanticTokensInfoService

src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/LanguageServer/RazorSemanticTokensScrollingBenchmark.cs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ public class RazorSemanticTokensScrollingBenchmark : RazorLanguageServerBenchmar
3333

3434
private Range Range { get; set; }
3535

36-
private ProjectSnapshotManagerDispatcher ProjectSnapshotManagerDispatcher { get; set; }
37-
3836
private string PagesDirectory { get; set; }
3937

4038
private string ProjectFilePath { get; set; }
@@ -80,7 +78,7 @@ public async Task RazorSemanticTokensRangeScrollingAsync()
8078
var cancellationToken = CancellationToken.None;
8179
var documentVersion = 1;
8280

83-
await UpdateDocumentAsync(documentVersion, DocumentSnapshot).ConfigureAwait(false);
81+
VersionCache!.TrackDocumentVersion(DocumentSnapshot, documentVersion);
8482

8583
var documentLineCount = Range.End.Line;
8684

@@ -100,12 +98,6 @@ public async Task RazorSemanticTokensRangeScrollingAsync()
10098
}
10199
}
102100

103-
private async Task UpdateDocumentAsync(int newVersion, IDocumentSnapshot documentSnapshot)
104-
{
105-
await ProjectSnapshotManagerDispatcher!.RunAsync(
106-
() => VersionCache!.TrackDocumentVersion(documentSnapshot, newVersion), CancellationToken.None).ConfigureAwait(false);
107-
}
108-
109101
[GlobalCleanup]
110102
public async Task CleanupServerAsync()
111103
{
@@ -125,6 +117,5 @@ private void EnsureServicesInitialized()
125117
var languageServer = RazorLanguageServer.GetInnerLanguageServerForTesting();
126118
RazorSemanticTokenService = languageServer.GetRequiredService<IRazorSemanticTokensInfoService>();
127119
VersionCache = languageServer.GetRequiredService<IDocumentVersionCache>();
128-
ProjectSnapshotManagerDispatcher = languageServer.GetRequiredService<ProjectSnapshotManagerDispatcher>();
129120
}
130121
}

src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectMutationBenchmark.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ await ProjectManager.UpdateAsync(
5353
cancellationSource.Cancel();
5454
});
5555

56-
_readThread = new Thread(async () =>
56+
_readThread = new Thread(() =>
5757
{
5858
while (true)
5959
{
@@ -63,9 +63,9 @@ await ProjectManager.UpdateAsync(
6363
return;
6464
}
6565

66-
await Dispatcher.RunAsync(() => ProjectManager.GetProjects(), CancellationToken.None).ConfigureAwait(false);
66+
_ = ProjectManager.GetProjects();
6767
Thread.Sleep(0);
68-
await Dispatcher.RunAsync(() => ProjectManager.GetOpenDocuments(), CancellationToken.None).ConfigureAwait(false);
68+
_ = ProjectManager.GetOpenDocuments();
6969
Thread.Sleep(0);
7070
}
7171
});

src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotManagerBenchmarkBase.cs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,11 @@
55
using System.Collections.Immutable;
66
using System.IO;
77
using Microsoft.AspNetCore.Razor.Language;
8-
using Microsoft.AspNetCore.Razor.LanguageServer;
98
using Microsoft.AspNetCore.Razor.Logging;
109
using Microsoft.AspNetCore.Razor.PooledObjects;
1110
using Microsoft.CodeAnalysis;
12-
using Microsoft.CodeAnalysis.Razor;
13-
using Microsoft.CodeAnalysis.Razor.Logging;
1411
using Microsoft.CodeAnalysis.Razor.ProjectSystem;
1512
using Microsoft.CodeAnalysis.Text;
16-
using Moq;
1713

1814
namespace Microsoft.AspNetCore.Razor.Microbenchmarks;
1915

@@ -23,7 +19,6 @@ public abstract partial class ProjectSnapshotManagerBenchmarkBase
2319
internal ImmutableArray<HostDocument> Documents { get; }
2420
internal ImmutableArray<TextLoader> TextLoaders { get; }
2521
protected string RepoRoot { get; }
26-
private protected ProjectSnapshotManagerDispatcher Dispatcher { get; }
2722

2823
protected ProjectSnapshotManagerBenchmarkBase(int documentCount = 100)
2924
{
@@ -61,19 +56,12 @@ protected ProjectSnapshotManagerBenchmarkBase(int documentCount = 100)
6156
}
6257

6358
Documents = documents.ToImmutable();
64-
65-
var loggerFactoryMock = new Mock<ILoggerFactory>(MockBehavior.Strict);
66-
loggerFactoryMock
67-
.Setup(x => x.GetOrCreateLogger(It.IsAny<string>()))
68-
.Returns(Mock.Of<ILogger>(MockBehavior.Strict));
69-
70-
Dispatcher = new LSPProjectSnapshotManagerDispatcher(EmptyLoggingFactory.Instance);
7159
}
7260

7361
internal ProjectSnapshotManager CreateProjectSnapshotManager()
7462
{
7563
return new ProjectSnapshotManager(
7664
projectEngineFactoryProvider: StaticProjectEngineFactoryProvider.Instance,
77-
dispatcher: Dispatcher);
65+
loggerFactory: EmptyLoggingFactory.Instance);
7866
}
7967
}

src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Hosting/RazorLanguageServerWrapper.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ public static RazorLanguageServerWrapper Create(
3939
Stream output,
4040
ILoggerFactory loggerFactory,
4141
ITelemetryReporter telemetryReporter,
42-
ProjectSnapshotManagerDispatcher? projectSnapshotManagerDispatcher = null,
4342
Action<IServiceCollection>? configure = null,
4443
LanguageServerFeatureOptions? featureOptions = null,
4544
RazorLSPOptions? razorLSPOptions = null,
@@ -58,7 +57,6 @@ public static RazorLanguageServerWrapper Create(
5857
jsonRpc,
5958
jsonSerializer,
6059
loggerFactory,
61-
projectSnapshotManagerDispatcher,
6260
featureOptions,
6361
configure,
6462
razorLSPOptions,

src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/LSPProjectSnapshotManagerDispatcher.cs

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageServer.cs

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ internal partial class RazorLanguageServer : AbstractLanguageServer<RazorRequest
4040
private readonly JsonRpc _jsonRpc;
4141
private readonly ILoggerFactory _loggerFactory;
4242
private readonly LanguageServerFeatureOptions? _featureOptions;
43-
private readonly ProjectSnapshotManagerDispatcher? _projectSnapshotManagerDispatcher;
4443
private readonly Action<IServiceCollection>? _configureServer;
4544
private readonly RazorLSPOptions _lspOptions;
4645
private readonly ILspServerActivationTracker? _lspServerActivationTracker;
@@ -54,7 +53,6 @@ public RazorLanguageServer(
5453
JsonRpc jsonRpc,
5554
JsonSerializer serializer,
5655
ILoggerFactory loggerFactory,
57-
ProjectSnapshotManagerDispatcher? projectSnapshotManagerDispatcher,
5856
LanguageServerFeatureOptions? featureOptions,
5957
Action<IServiceCollection>? configureServer,
6058
RazorLSPOptions? lspOptions,
@@ -65,7 +63,6 @@ public RazorLanguageServer(
6563
_jsonRpc = jsonRpc;
6664
_loggerFactory = loggerFactory;
6765
_featureOptions = featureOptions;
68-
_projectSnapshotManagerDispatcher = projectSnapshotManagerDispatcher;
6966
_configureServer = configureServer;
7067
_lspOptions = lspOptions ?? RazorLSPOptions.Default;
7168
_lspServerActivationTracker = lspServerActivationTracker;
@@ -108,15 +105,6 @@ protected override ILspServices ConstructLspServices()
108105
// Add the logger as a service in case anything in CLaSP pulls it out to do logging
109106
services.AddSingleton<ILspLogger>(_logger);
110107

111-
if (_projectSnapshotManagerDispatcher is null)
112-
{
113-
services.AddSingleton<ProjectSnapshotManagerDispatcher, LSPProjectSnapshotManagerDispatcher>();
114-
}
115-
else
116-
{
117-
services.AddSingleton<ProjectSnapshotManagerDispatcher>(_projectSnapshotManagerDispatcher);
118-
}
119-
120108
services.AddSingleton<IAdhocWorkspaceFactory, AdhocWorkspaceFactory>();
121109
services.AddSingleton<IWorkspaceProvider, LspWorkspaceProvider>();
122110

0 commit comments

Comments
 (0)