Skip to content

Commit 5ce6db6

Browse files
committed
replace remaining AddToDeferred with DisposableBuilder
1 parent 03f0cb2 commit 5ce6db6

File tree

2 files changed

+22
-16
lines changed

2 files changed

+22
-16
lines changed

src/SharpIDE.Godot/Features/Problems/ProblemsPanel.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ private void CreateDiagnosticTreeItem(Tree tree, TreeItem parent, ViewChangedEve
189189
[RequiresGodotUiThread]
190190
private void FreeTreeItem(TreeItem? treeItem)
191191
{
192+
treeItem?.SharpIdeDisposable?.Dispose();
192193
treeItem?.Free();
193194
}
194195

src/SharpIDE.Godot/Features/SolutionExplorer/SolutionExplorerPanel.cs

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,8 @@ public async Task BindToSolution(SharpIdeSolutionModel solution)
163163
rootItem.SetText(0, solution.Name);
164164
rootItem.SetIcon(0, SlnIcon);
165165
_rootItem = rootItem;
166+
167+
var disposableBuilder = new DisposableBuilder();
166168

167169
// Observe Projects
168170
var projectsView = solution.Projects.CreateView(y => new TreeItemContainer());
@@ -173,7 +175,7 @@ public async Task BindToSolution(SharpIdeSolutionModel solution)
173175
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => e.NewItem.View.Value = CreateProjectTreeItem(_tree, _rootItem, e.NewItem.Value)),
174176
NotifyCollectionChangedAction.Remove => FreeTreeItem(e.OldItem.View.Value),
175177
_ => Task.CompletedTask
176-
}), configureAwait: false).AddToDeferred(this);
178+
}), configureAwait: false).AddTo(ref disposableBuilder);
177179

178180
// Observe Solution Folders
179181
var foldersView = solution.SlnFolders.CreateView(y => new TreeItemContainer());
@@ -184,10 +186,11 @@ public async Task BindToSolution(SharpIdeSolutionModel solution)
184186
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => e.NewItem.View.Value = CreateSlnFolderTreeItem(_tree, _rootItem, e.NewItem.Value)),
185187
NotifyCollectionChangedAction.Remove => FreeTreeItem(e.OldItem.View.Value),
186188
_ => Task.CompletedTask
187-
}), configureAwait: false).AddToDeferred(this);
189+
}), configureAwait: false).AddTo(ref disposableBuilder);
188190

189191
rootItem.SetCollapsedRecursive(true);
190192
rootItem.Collapsed = false;
193+
rootItem.SharpIdeDisposable = disposableBuilder.Build();
191194
await this.InvokeAsync(() =>
192195
{
193196
_panelContainer.AddChild(_tree);
@@ -201,6 +204,8 @@ private TreeItem CreateSlnFolderTreeItem(Tree tree, TreeItem parent, SharpIdeSol
201204
folderItem.SetText(0, slnFolder.Name);
202205
folderItem.SetIcon(0, SlnFolderIcon);
203206
folderItem.SharpIdeNode = slnFolder;
207+
208+
var disposableBuilder = new DisposableBuilder();
204209

205210
// Observe folder sub-collections
206211
var subFoldersView = slnFolder.Folders.CreateView(y => new TreeItemContainer());
@@ -212,7 +217,7 @@ private TreeItem CreateSlnFolderTreeItem(Tree tree, TreeItem parent, SharpIdeSol
212217
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateSlnFolderTreeItem(_tree, folderItem, innerEvent.NewItem.Value)),
213218
NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value),
214219
_ => Task.CompletedTask
215-
}), configureAwait: false).AddToDeferred(this);
220+
}), configureAwait: false).AddTo(ref disposableBuilder);
216221

217222
var projectsView = slnFolder.Projects.CreateView(y => new TreeItemContainer());
218223
projectsView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateProjectTreeItem(_tree, folderItem, s.Value));
@@ -222,7 +227,7 @@ private TreeItem CreateSlnFolderTreeItem(Tree tree, TreeItem parent, SharpIdeSol
222227
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateProjectTreeItem(_tree, folderItem, innerEvent.NewItem.Value)),
223228
NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value),
224229
_ => Task.CompletedTask
225-
}), configureAwait: false).AddToDeferred(this);
230+
}), configureAwait: false).AddTo(ref disposableBuilder);
226231

227232
var filesView = slnFolder.Files.CreateView(y => new TreeItemContainer());
228233
filesView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateFileTreeItem(_tree, folderItem, s.Value));
@@ -232,7 +237,8 @@ private TreeItem CreateSlnFolderTreeItem(Tree tree, TreeItem parent, SharpIdeSol
232237
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFileTreeItem(_tree, folderItem, innerEvent.NewItem.Value, innerEvent.NewStartingIndex)),
233238
NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value),
234239
_ => Task.CompletedTask
235-
}), configureAwait: false).AddToDeferred(this);
240+
}), configureAwait: false).AddTo(ref disposableBuilder);
241+
folderItem.SharpIdeDisposable = disposableBuilder.Build();
236242
return folderItem;
237243
}
238244

@@ -246,6 +252,8 @@ private TreeItem CreateProjectTreeItem(Tree tree, TreeItem parent, SharpIdeProje
246252
if (projectModel.IsLoading is false && projectModel.IsInvalid) projectItem.SetSuffix(0, " · load failed");
247253
projectItem.SharpIdeNode = projectModel;
248254

255+
var disposableBuilder = new DisposableBuilder();
256+
249257
projectModel.MsBuildProjectLoadState.SubscribeOnThreadPool().ObserveOnThreadPool().SubscribeAwait(async (loadState, ct) =>
250258
{
251259
var newIcon = loadState switch
@@ -262,7 +270,7 @@ await this.InvokeAsync(() =>
262270
projectItem.SetIcon(0, newIcon);
263271
projectItem.SetSuffix(0, suffix);
264272
});
265-
}, configureAwait: false).AddToDeferred(this);
273+
}, configureAwait: false).AddTo(ref disposableBuilder);
266274

267275
// Observe project folder's subfolders and files
268276
var projectFolder = projectModel.Folder;
@@ -277,7 +285,7 @@ await this.InvokeAsync(() =>
277285
NotifyCollectionChangedAction.Move => MoveTreeItem(_tree, innerEvent.NewItem.View, innerEvent.NewItem.Value, innerEvent.OldStartingIndex, innerEvent.NewStartingIndex),
278286
NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value),
279287
_ => Task.CompletedTask
280-
}), configureAwait: false).AddToDeferred(this);
288+
}), configureAwait: false).AddTo(ref disposableBuilder);
281289

282290
var filesView = projectFolder.Files.CreateView(y => new TreeItemContainer());
283291
filesView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateFileTreeItem(_tree, projectItem, s.Value));
@@ -288,7 +296,8 @@ await this.InvokeAsync(() =>
288296
NotifyCollectionChangedAction.Move => MoveTreeItem(_tree, innerEvent.NewItem.View, innerEvent.NewItem.Value, innerEvent.OldStartingIndex, innerEvent.NewStartingIndex),
289297
NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value),
290298
_ => Task.CompletedTask
291-
}), configureAwait: false).AddToDeferred(this);
299+
}), configureAwait: false).AddTo(ref disposableBuilder);
300+
projectItem.SharpIdeDisposable = disposableBuilder.Build();
292301
return projectItem;
293302
}
294303

@@ -356,15 +365,11 @@ private TreeItem CreateFileTreeItem(Tree tree, TreeItem parent, SharpIdeFile sha
356365
fileItem.SharpIdeNode = sharpIdeFile;
357366

358367
sharpIdeFile.Name.Skip(1).SubscribeOnThreadPool().ObserveOnThreadPool()
359-
.SubscribeAwait(async (newName, ct) =>
368+
.SubscribeAwait(async (newName, ct) => await this.InvokeAsync(() =>
360369
{
361-
await this.InvokeAsync(() =>
362-
{
363-
GD.Print($"Updating file name in solution explorer to '{newName}'");
364-
fileItem.SetText(0, newName);
365-
fileItem.SetIconsForFileExtension(sharpIdeFile);
366-
});
367-
}, configureAwait: false)
370+
fileItem.SetText(0, newName);
371+
fileItem.SetIconsForFileExtension(sharpIdeFile);
372+
}), configureAwait: false)
368373
.AddTo(ref disposableBuilder);
369374
fileItem.SharpIdeDisposable = disposableBuilder.Build();
370375
return fileItem;

0 commit comments

Comments
 (0)