Browse Source

Implement filtering on DerivedTypesTreeNode.

pull/234/merge
Ed Harvey 14 years ago
parent
commit
43e867c2ae
  1. 52
      ILSpy/TreeNodes/DerivedTypesTreeNode.cs

52
ILSpy/TreeNodes/DerivedTypesTreeNode.cs

@ -105,13 +105,13 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -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 @@ -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 @@ -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; }
}
}
}

Loading…
Cancel
Save