Skip to content

Commit

Permalink
Remove ProjectSnapshotManager.ReportError(...) methods
Browse files Browse the repository at this point in the history
These methods just call into IErrorReporter.ReportError(...). Without them, ProjectSnapshotManager no longer needs to take an IErrorReporter in its constructor.
  • Loading branch information
DustinCampbell committed Mar 12, 2024
1 parent 6f318b8 commit 06a8872
Show file tree
Hide file tree
Showing 11 changed files with 26 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ internal ProjectSnapshotManager CreateProjectSnapshotManager()
{
return new ProjectSnapshotManager(
projectEngineFactoryProvider: StaticProjectEngineFactoryProvider.Instance,
dispatcher: Dispatcher,
errorReporter: ErrorReporter);
dispatcher: Dispatcher);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ namespace Microsoft.CodeAnalysis.Razor.ProjectSystem;
// The implementation will create a ProjectSnapshot for each HostProject.
internal class ProjectSnapshotManager(
IProjectEngineFactoryProvider projectEngineFactoryProvider,
ProjectSnapshotManagerDispatcher dispatcher,
IErrorReporter errorReporter) : ProjectSnapshotManagerBase
ProjectSnapshotManagerDispatcher dispatcher)
: ProjectSnapshotManagerBase
{
public override event EventHandler<ProjectChangeEventArgs>? PriorityChanged;
public override event EventHandler<ProjectChangeEventArgs>? Changed;
Expand All @@ -40,7 +40,6 @@ internal class ProjectSnapshotManager(
// We have a queue for changes because if one change results in another change aka, add -> open we want to make sure the "add" finishes running first before "open" is notified.
private readonly Queue<ProjectChangeEventArgs> _notificationWork = new();
private readonly IProjectEngineFactoryProvider _projectEngineFactoryProvider = projectEngineFactoryProvider;
private readonly IErrorReporter _errorReporter = errorReporter;
private readonly ProjectSnapshotManagerDispatcher _dispatcher = dispatcher;

// internal for testing
Expand Down Expand Up @@ -330,28 +329,6 @@ internal override void SolutionClosed()
IsSolutionClosing = true;
}

internal override void ReportError(Exception exception)
{
_errorReporter.ReportError(exception);
}

internal override void ReportError(Exception exception, IProjectSnapshot project)
{
_errorReporter.ReportError(exception, project);
}

internal override void ReportError(Exception exception, ProjectKey projectKey)
{
if (TryGetLoadedProject(projectKey, out var project))
{
_errorReporter.ReportError(exception, project);
}
else
{
_errorReporter.ReportError(exception);
}
}

private void NotifyListeners(IProjectSnapshot? older, IProjectSnapshot? newer, string? documentFilePath, ProjectChangeKind kind)
{
// Change notifications should always be sent on the dispatcher.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,6 @@ internal abstract class ProjectSnapshotManagerBase : IProjectSnapshotManager

internal abstract void ProjectRemoved(ProjectKey projectKey);

internal abstract void ReportError(Exception exception);

internal abstract void ReportError(Exception exception, IProjectSnapshot project);

internal abstract void ReportError(Exception exception, ProjectKey projectKey);

internal abstract void SolutionOpened();

internal abstract void SolutionClosed();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,26 @@ internal class BackgroundDocumentGenerator : IRazorStartupService
// Internal for testing
internal readonly Dictionary<DocumentKey, (IProjectSnapshot project, IDocumentSnapshot document)> Work = [];

private readonly ProjectSnapshotManagerBase _projectManager;
private readonly IProjectSnapshotManager _projectManager;
private readonly ProjectSnapshotManagerDispatcher _dispatcher;
private readonly IRazorDynamicFileInfoProviderInternal _infoProvider;
private readonly IErrorReporter _errorReporter;
private readonly HashSet<string> _suppressedDocuments = new(FilePathComparer.Instance);

private Timer? _timer;
private bool _solutionIsClosing;

[ImportingConstructor]
public BackgroundDocumentGenerator(
ProjectSnapshotManagerBase projectManager,
IProjectSnapshotManager projectManager,
ProjectSnapshotManagerDispatcher dispatcher,
IRazorDynamicFileInfoProviderInternal infoProvider)
IRazorDynamicFileInfoProviderInternal infoProvider,
IErrorReporter errorReporter)
{
_projectManager = projectManager;
_dispatcher = dispatcher;
_infoProvider = infoProvider;
_errorReporter = errorReporter;

_projectManager.Changed += ProjectManager_Changed;
}
Expand Down Expand Up @@ -235,32 +238,19 @@ private async Task TimerTickAsync()
}
catch (Exception ex)
{
Assumes.NotNull(_projectManager);

// This is something totally unexpected, let's just send it over to the workspace.
await _dispatcher
.RunAsync(
() => _projectManager.ReportError(ex),
CancellationToken.None)
.ConfigureAwait(false);
_errorReporter.ReportError(ex);
}
}

private void ReportError(IProjectSnapshot project, Exception ex)
{
OnErrorBeingReported();

Assumes.NotNull(_projectManager);

_dispatcher.RunAsync(
() => _projectManager.ReportError(ex, project),
CancellationToken.None).Forget();
_errorReporter.ReportError(ex, project);
}

private bool Suppressed(IProjectSnapshot project, IDocumentSnapshot document)
{
Assumes.NotNull(_projectManager);

lock (_suppressedDocuments)
{
var filePath = document.FilePath.AssumeNotNull();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public async Task DisposeAsync()
}
catch (Exception ex)
{
_projectManager.ReportError(ex, project);
_errorReporter.ReportError(ex, project);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor;
[method: ImportingConstructor]
internal sealed class VisualStudioProjectSnapshotManager(
IProjectEngineFactoryProvider projectEngineFactoryProvider,
ProjectSnapshotManagerDispatcher dispatcher,
IErrorReporter errorReporter)
: ProjectSnapshotManager(projectEngineFactoryProvider, dispatcher, errorReporter)
ProjectSnapshotManagerDispatcher dispatcher)
: ProjectSnapshotManager(projectEngineFactoryProvider, dispatcher)
{
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ private protected TestProjectSnapshotManager CreateProjectSnapshotManager()
=> CreateProjectSnapshotManager(ProjectEngineFactories.DefaultProvider);

private protected TestProjectSnapshotManager CreateProjectSnapshotManager(IProjectEngineFactoryProvider projectEngineFactoryProvider)
=> new(projectEngineFactoryProvider, Dispatcher, ErrorReporter);
=> new(projectEngineFactoryProvider, Dispatcher);

internal RazorRequestContext CreateRazorRequestContext(VersionedDocumentContext? documentContext, ILspServices? lspServices = null)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,8 @@ namespace Microsoft.AspNetCore.Razor.Test.Common.ProjectSystem;

internal partial class TestProjectSnapshotManager(
IProjectEngineFactoryProvider projectEngineFactoryProvider,
ProjectSnapshotManagerDispatcher dispatcher,
IErrorReporter errorReporter)
: ProjectSnapshotManager(projectEngineFactoryProvider, dispatcher, errorReporter)
ProjectSnapshotManagerDispatcher dispatcher)
: ProjectSnapshotManager(projectEngineFactoryProvider, dispatcher)
{
public TestDocumentSnapshot CreateAndAddDocument(ProjectSnapshot projectSnapshot, string filePath)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,5 @@ private protected TestProjectSnapshotManager CreateProjectSnapshotManager()
=> CreateProjectSnapshotManager(ProjectEngineFactories.DefaultProvider);

private protected TestProjectSnapshotManager CreateProjectSnapshotManager(IProjectEngineFactoryProvider projectEngineFactoryProvider)
=> new(projectEngineFactoryProvider, Dispatcher, ErrorReporter);
=> new(projectEngineFactoryProvider, Dispatcher);
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ private protected TestProjectSnapshotManager CreateProjectSnapshotManager()
=> CreateProjectSnapshotManager(ProjectEngineFactoryProvider);

private protected TestProjectSnapshotManager CreateProjectSnapshotManager(IProjectEngineFactoryProvider projectEngineFactoryProvider)
=> new(projectEngineFactoryProvider, Dispatcher, ErrorReporter);
=> new(projectEngineFactoryProvider, Dispatcher);

protected virtual void ConfigureWorkspaceServices(List<IWorkspaceService> services)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ await RunOnDispatcherAsync(() =>
var hostDocument = s_documents[0];

var project = projectManager.GetLoadedProject(s_hostProject1.Key);
var queue = new BackgroundDocumentGenerator(projectManager, Dispatcher, _dynamicFileInfoProvider)
var queue = new BackgroundDocumentGenerator(projectManager, Dispatcher, _dynamicFileInfoProvider, ErrorReporter)
{
Delay = TimeSpan.FromMilliseconds(1),
NotifyBackgroundWorkCompleted = new ManualResetEventSlim(initialState: false),
Expand Down Expand Up @@ -120,7 +120,7 @@ await RunOnDispatcherAsync(() =>

var project = projectManager.GetLoadedProject(s_hostProject1.Key);

var queue = new BackgroundDocumentGenerator(projectManager, Dispatcher, _dynamicFileInfoProvider)
var queue = new BackgroundDocumentGenerator(projectManager, Dispatcher, _dynamicFileInfoProvider, ErrorReporter)
{
Delay = TimeSpan.FromMilliseconds(1),
NotifyBackgroundWorkCompleted = new ManualResetEventSlim(initialState: false),
Expand Down Expand Up @@ -161,7 +161,7 @@ await RunOnDispatcherAsync(() =>

var project = projectManager.GetLoadedProject(s_hostProject1.Key);

var queue = new BackgroundDocumentGenerator(projectManager, Dispatcher, _dynamicFileInfoProvider)
var queue = new BackgroundDocumentGenerator(projectManager, Dispatcher, _dynamicFileInfoProvider, ErrorReporter)
{
Delay = TimeSpan.FromMilliseconds(1),
NotifyBackgroundWorkCompleted = new ManualResetEventSlim(initialState: false),
Expand Down Expand Up @@ -195,7 +195,7 @@ await RunOnDispatcherAsync(() =>

var project = projectManager.GetLoadedProject(s_hostProject1.Key);

var queue = new BackgroundDocumentGenerator(projectManager, Dispatcher, _dynamicFileInfoProvider)
var queue = new BackgroundDocumentGenerator(projectManager, Dispatcher, _dynamicFileInfoProvider, ErrorReporter)
{
Delay = TimeSpan.FromMilliseconds(1),
BlockBackgroundWorkStart = new ManualResetEventSlim(initialState: false),
Expand Down Expand Up @@ -239,7 +239,7 @@ await RunOnDispatcherAsync(() =>

var project = projectManager.GetLoadedProject(s_hostProject1.Key);

var queue = new BackgroundDocumentGenerator(projectManager, Dispatcher, _dynamicFileInfoProvider)
var queue = new BackgroundDocumentGenerator(projectManager, Dispatcher, _dynamicFileInfoProvider, ErrorReporter)
{
Delay = TimeSpan.FromMilliseconds(1),
BlockBackgroundWorkStart = new ManualResetEventSlim(initialState: false),
Expand Down Expand Up @@ -316,7 +316,7 @@ await RunOnDispatcherAsync(() =>
}
});

var queue = new BackgroundDocumentGenerator(projectManager, Dispatcher, _dynamicFileInfoProvider)
var queue = new BackgroundDocumentGenerator(projectManager, Dispatcher, _dynamicFileInfoProvider, ErrorReporter)
{
Delay = TimeSpan.FromMilliseconds(1),
BlockBackgroundWorkStart = new ManualResetEventSlim(initialState: false),
Expand Down Expand Up @@ -375,7 +375,7 @@ await RunOnDispatcherAsync(() =>
projectManager.DocumentAdded(s_hostProject1.Key, TestProjectData.SomeProjectImportFile, null!);
});

var queue = new BackgroundDocumentGenerator(projectManager, Dispatcher, _dynamicFileInfoProvider)
var queue = new BackgroundDocumentGenerator(projectManager, Dispatcher, _dynamicFileInfoProvider, ErrorReporter)
{
Delay = TimeSpan.FromMilliseconds(1),
BlockBackgroundWorkStart = new ManualResetEventSlim(initialState: false),
Expand Down

0 comments on commit 06a8872

Please sign in to comment.