dispose project diagnostics subscription

This commit is contained in:
Matt Parker
2025-11-24 18:41:47 +10:00
parent e48bd78aac
commit f56db8d663
2 changed files with 4 additions and 2 deletions

View File

@@ -51,6 +51,7 @@ public partial class SharpIdeCodeEdit : CodeEdit
private bool _fileChangingSuppressBreakpointToggleEvent; private bool _fileChangingSuppressBreakpointToggleEvent;
private bool _settingWholeDocumentTextSuppressLineEditsEvent; // A dodgy workaround - setting the whole document doesn't guarantee that the line count stayed the same etc. We are still going to have broken highlighting. TODO: Investigate getting minimal text change ranges, and change those ranges only private bool _settingWholeDocumentTextSuppressLineEditsEvent; // A dodgy workaround - setting the whole document doesn't guarantee that the line count stayed the same etc. We are still going to have broken highlighting. TODO: Investigate getting minimal text change ranges, and change those ranges only
private bool _fileDeleted; private bool _fileDeleted;
private IDisposable? _projectDiagnosticsObserveDisposable;
[Inject] private readonly IdeOpenTabsFileManager _openTabsFileManager = null!; [Inject] private readonly IdeOpenTabsFileManager _openTabsFileManager = null!;
[Inject] private readonly RunService _runService = null!; [Inject] private readonly RunService _runService = null!;
@@ -151,6 +152,7 @@ public partial class SharpIdeCodeEdit : CodeEdit
{ {
_currentFile?.FileContentsChangedExternally.Unsubscribe(OnFileChangedExternally); _currentFile?.FileContentsChangedExternally.Unsubscribe(OnFileChangedExternally);
_currentFile?.FileDeleted.Unsubscribe(OnFileDeleted); _currentFile?.FileDeleted.Unsubscribe(OnFileDeleted);
_projectDiagnosticsObserveDisposable?.Dispose();
GlobalEvents.Instance.SolutionAltered.Unsubscribe(OnSolutionAltered); GlobalEvents.Instance.SolutionAltered.Unsubscribe(OnSolutionAltered);
if (_currentFile is not null) _openTabsFileManager.CloseFile(_currentFile); if (_currentFile is not null) _openTabsFileManager.CloseFile(_currentFile);
} }
@@ -259,7 +261,7 @@ public partial class SharpIdeCodeEdit : CodeEdit
var project = ((IChildSharpIdeNode)_currentFile).GetNearestProjectNode(); var project = ((IChildSharpIdeNode)_currentFile).GetNearestProjectNode();
if (project is not null) if (project is not null)
{ {
project.Diagnostics.ObserveChanged() _projectDiagnosticsObserveDisposable = project.Diagnostics.ObserveChanged()
.SubscribeAwait(async (innerEvent, ct) => .SubscribeAwait(async (innerEvent, ct) =>
{ {
var projectDiagnosticsForFile = project.Diagnostics.Where(s => s.FilePath == _currentFile.Path).ToImmutableArray(); var projectDiagnosticsForFile = project.Diagnostics.Where(s => s.FilePath == _currentFile.Path).ToImmutableArray();