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