Browse Source

More efficient/correct test for static class icon

pull/170/head
Ed Harvey 15 years ago
parent
commit
e7caa3f43f
  1. 56
      ILSpy/TreeNodes/TypeTreeNode.cs

56
ILSpy/TreeNodes/TypeTreeNode.cs

@ -30,7 +30,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
{ {
readonly TypeDefinition type; readonly TypeDefinition type;
readonly AssemblyTreeNode parentAssemblyNode; readonly AssemblyTreeNode parentAssemblyNode;
public TypeTreeNode(TypeDefinition type, AssemblyTreeNode parentAssemblyNode) public TypeTreeNode(TypeDefinition type, AssemblyTreeNode parentAssemblyNode)
{ {
if (parentAssemblyNode == null) if (parentAssemblyNode == null)
@ -41,29 +41,36 @@ namespace ICSharpCode.ILSpy.TreeNodes
this.parentAssemblyNode = parentAssemblyNode; this.parentAssemblyNode = parentAssemblyNode;
this.LazyLoading = true; this.LazyLoading = true;
} }
public TypeDefinition TypeDefinition { public TypeDefinition TypeDefinition
{
get { return type; } get { return type; }
} }
public AssemblyTreeNode ParentAssemblyNode { public AssemblyTreeNode ParentAssemblyNode
{
get { return parentAssemblyNode; } get { return parentAssemblyNode; }
} }
public string Name { public string Name
{
get { return type.Name; } get { return type.Name; }
} }
public string Namespace { public string Namespace
{
get { return type.Namespace; } get { return type.Namespace; }
} }
public override object Text { public override object Text
{
get { return HighlightSearchMatch(this.Language.TypeToString(type, includeNamespace: false)); } get { return HighlightSearchMatch(this.Language.TypeToString(type, includeNamespace: false)); }
} }
public bool IsPublicAPI { public bool IsPublicAPI
get { {
get
{
switch (type.Attributes & TypeAttributes.VisibilityMask) { switch (type.Attributes & TypeAttributes.VisibilityMask) {
case TypeAttributes.Public: case TypeAttributes.Public:
case TypeAttributes.NestedPublic: case TypeAttributes.NestedPublic:
@ -75,7 +82,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
} }
} }
} }
public override FilterResult Filter(FilterSettings settings) public override FilterResult Filter(FilterSettings settings)
{ {
if (!settings.ShowInternalApi && !IsPublicAPI) if (!settings.ShowInternalApi && !IsPublicAPI)
@ -89,7 +96,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
return FilterResult.Recurse; return FilterResult.Recurse;
} }
} }
protected override void LoadChildren() protected override void LoadChildren()
{ {
if (type.BaseType != null || type.HasInterfaces) if (type.BaseType != null || type.HasInterfaces)
@ -102,7 +109,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
foreach (FieldDefinition field in type.Fields.OrderBy(m => m.Name)) { foreach (FieldDefinition field in type.Fields.OrderBy(m => m.Name)) {
this.Children.Add(new FieldTreeNode(field)); this.Children.Add(new FieldTreeNode(field));
} }
foreach (PropertyDefinition property in type.Properties.OrderBy(m => m.Name)) { foreach (PropertyDefinition property in type.Properties.OrderBy(m => m.Name)) {
this.Children.Add(new PropertyTreeNode(property)); this.Children.Add(new PropertyTreeNode(property));
} }
@ -116,7 +123,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
} }
} }
} }
public override void Decompile(Language language, ITextOutput output, DecompilationOptions options) public override void Decompile(Language language, ITextOutput output, DecompilationOptions options)
{ {
language.DecompileType(type, output, options); language.DecompileType(type, output, options);
@ -188,15 +195,20 @@ namespace ICSharpCode.ILSpy.TreeNodes
private static bool IsStaticClass(TypeDefinition type) private static bool IsStaticClass(TypeDefinition type)
{ {
if(type.IsSealed) if (type.IsSealed) {
return !type.Methods.Where(m => m.Name == ".ctor").Any(m => !m.IsPrivate); if (type.IsAbstract)
return true;
else
return !type.Methods.Where(m => m.Name == ".ctor").Any(m => !m.IsPrivate);
}
return false; return false;
} }
#endregion #endregion
MemberReference IMemberTreeNode.Member { MemberReference IMemberTreeNode.Member
{
get { return type; } get { return type; }
} }
} }

Loading…
Cancel
Save