From 43e867c2ae25f59ee3b95715104e16c94ec99d0c Mon Sep 17 00:00:00 2001 From: Ed Harvey <edharvey@optusnet.com.au> Date: Sun, 29 May 2011 17:02:17 +1000 Subject: [PATCH] Implement filtering on DerivedTypesTreeNode. --- ILSpy/TreeNodes/DerivedTypesTreeNode.cs | 52 +++++++++++++++++++------ 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/ILSpy/TreeNodes/DerivedTypesTreeNode.cs b/ILSpy/TreeNodes/DerivedTypesTreeNode.cs index 2fd497395..9c3f77c70 100644 --- a/ILSpy/TreeNodes/DerivedTypesTreeNode.cs +++ b/ILSpy/TreeNodes/DerivedTypesTreeNode.cs @@ -105,13 +105,13 @@ namespace ICSharpCode.ILSpy.TreeNodes class DerivedTypesEntryNode : ILSpyTreeNode, IMemberTreeNode { - TypeDefinition def; + TypeDefinition type; AssemblyDefinition[] assemblies; ThreadingSupport threading; - public DerivedTypesEntryNode(TypeDefinition def, AssemblyDefinition[] assemblies) + public DerivedTypesEntryNode(TypeDefinition type, AssemblyDefinition[] assemblies) { - this.def = def; + this.type = type; this.assemblies = assemblies; this.LazyLoading = true; threading = new ThreadingSupport(); @@ -119,20 +119,50 @@ namespace ICSharpCode.ILSpy.TreeNodes public override bool ShowExpander { get { - return !def.IsSealed && base.ShowExpander; + return !type.IsSealed && base.ShowExpander; } } public override object Text { - get { return this.Language.TypeToString(def, true); } + get { return this.Language.TypeToString(type, true); } } public override object Icon { get { - return TypeTreeNode.GetIcon(def); + return TypeTreeNode.GetIcon(type); } } - + + public override FilterResult Filter(FilterSettings settings) + { + if (!settings.ShowInternalApi && !IsPublicAPI) + return FilterResult.Hidden; + if (settings.SearchTermMatches(type.Name)) { + if (type.IsNested && !settings.Language.ShowMember(type)) + return FilterResult.Hidden; + else + return FilterResult.Match; + } else { + return FilterResult.Recurse; + } + } + + public bool IsPublicAPI + { + get + { + switch (type.Attributes & TypeAttributes.VisibilityMask) { + case TypeAttributes.Public: + case TypeAttributes.NestedPublic: + case TypeAttributes.NestedFamily: + case TypeAttributes.NestedFamORAssem: + return true; + default: + return false; + } + } + } + protected override void LoadChildren() { threading.LoadChildren(this, FetchChildren); @@ -141,21 +171,21 @@ namespace ICSharpCode.ILSpy.TreeNodes IEnumerable<ILSpyTreeNode> FetchChildren(CancellationToken ct) { // FetchChildren() runs on the main thread; but the enumerator will be consumed on a background thread - return DerivedTypesTreeNode.FindDerivedTypes(def, assemblies, ct); + return DerivedTypesTreeNode.FindDerivedTypes(type, assemblies, ct); } public override void ActivateItem(System.Windows.RoutedEventArgs e) { - e.Handled = BaseTypesEntryNode.ActivateItem(this, def); + e.Handled = BaseTypesEntryNode.ActivateItem(this, type); } public override void Decompile(Language language, ITextOutput output, DecompilationOptions options) { - language.WriteCommentLine(output, language.TypeToString(def, true)); + language.WriteCommentLine(output, language.TypeToString(type, true)); } MemberReference IMemberTreeNode.Member { - get { return def; } + get { return type; } } } }