From d31ed51569b4d6c2d2bbb0526881594b1a4b3b7d Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 21 Feb 2025 15:50:50 +0100 Subject: [PATCH] Fix a few bugs in AnalyzerEntityTreeNode --- ILSpy/Analyzers/AnalyzerEntityTreeNode.cs | 6 ++++- .../TreeNodes/AnalyzedModuleTreeNode.cs | 24 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/ILSpy/Analyzers/AnalyzerEntityTreeNode.cs b/ILSpy/Analyzers/AnalyzerEntityTreeNode.cs index 630bde183..0e1895482 100644 --- a/ILSpy/Analyzers/AnalyzerEntityTreeNode.cs +++ b/ILSpy/Analyzers/AnalyzerEntityTreeNode.cs @@ -46,10 +46,14 @@ namespace ICSharpCode.ILSpy.Analyzers MessageBus.Send(this, new NavigateToReferenceEventArgs(new EntityReference(this.Member.ParentModule?.MetadataFile, this.Member.MetadataToken))); } - public override object ToolTip => Member.ParentModule?.MetadataFile?.FileName; + public override object ToolTip => Member?.ParentModule?.MetadataFile?.FileName; public override bool HandleAssemblyListChanged(ICollection removedAssemblies, ICollection addedAssemblies) { + if (Member == null) + { + return true; + } foreach (LoadedAssembly asm in removedAssemblies) { if (this.Member.ParentModule.MetadataFile == asm.GetMetadataFileOrNull()) diff --git a/ILSpy/Analyzers/TreeNodes/AnalyzedModuleTreeNode.cs b/ILSpy/Analyzers/TreeNodes/AnalyzedModuleTreeNode.cs index a85096147..157cb4ae4 100644 --- a/ILSpy/Analyzers/TreeNodes/AnalyzedModuleTreeNode.cs +++ b/ILSpy/Analyzers/TreeNodes/AnalyzedModuleTreeNode.cs @@ -17,9 +17,12 @@ // DEALINGS IN THE SOFTWARE. using System; +using System.Collections.Generic; using System.Windows; using ICSharpCode.Decompiler.TypeSystem; +using ICSharpCode.ILSpyX; +using ICSharpCode.ILSpyX.TreeView; using ICSharpCode.ILSpyX.TreeView.PlatformAbstractions; namespace ICSharpCode.ILSpy.Analyzers.TreeNodes @@ -38,6 +41,8 @@ namespace ICSharpCode.ILSpy.Analyzers.TreeNodes public override object Text => analyzedModule.AssemblyName; + public override object ToolTip => analyzedModule.MetadataFile?.FileName; + protected override void LoadChildren() { foreach (var lazy in Analyzers) @@ -62,5 +67,24 @@ namespace ICSharpCode.ILSpy.Analyzers.TreeNodes } public override IEntity Member => null; + + public override bool HandleAssemblyListChanged(ICollection removedAssemblies, ICollection addedAssemblies) + { + if (analyzedModule == null) + { + return true; + } + foreach (LoadedAssembly asm in removedAssemblies) + { + if (this.analyzedModule.MetadataFile == asm.GetMetadataFileOrNull()) + return false; // remove this node + } + this.Children.RemoveAll( + delegate (SharpTreeNode n) { + AnalyzerTreeNode an = n as AnalyzerTreeNode; + return an == null || !an.HandleAssemblyListChanged(removedAssemblies, addedAssemblies); + }); + return true; + } } }