Browse Source

Remove duplicate MetadataToken on PropertyTreeNode + more clean-up

pull/863/head
Siegfried Pammer 8 years ago
parent
commit
55a99ed5b0
  1. 5
      ILSpy/TreeNodes/DerivedTypesEntryNode.cs
  2. 29
      ILSpy/TreeNodes/EventTreeNode.cs
  3. 29
      ILSpy/TreeNodes/FieldTreeNode.cs
  4. 34
      ILSpy/TreeNodes/MethodTreeNode.cs
  5. 30
      ILSpy/TreeNodes/PropertyTreeNode.cs
  6. 4
      ILSpy/TreeNodes/SearchMsdnContextMenuEntry.cs
  7. 72
      ILSpy/TreeNodes/TypeTreeNode.cs

5
ILSpy/TreeNodes/DerivedTypesEntryNode.cs

@ -100,9 +100,6 @@ namespace ICSharpCode.ILSpy.TreeNodes
language.WriteCommentLine(output, language.TypeToString(type, true)); language.WriteCommentLine(output, language.TypeToString(type, true));
} }
MemberReference IMemberTreeNode.Member MemberReference IMemberTreeNode.Member => type;
{
get { return type; }
}
} }
} }

29
ILSpy/TreeNodes/EventTreeNode.cs

@ -28,13 +28,12 @@ namespace ICSharpCode.ILSpy.TreeNodes
/// </summary> /// </summary>
public sealed class EventTreeNode : ILSpyTreeNode, IMemberTreeNode public sealed class EventTreeNode : ILSpyTreeNode, IMemberTreeNode
{ {
readonly EventDefinition ev;
public EventTreeNode(EventDefinition ev) public EventTreeNode(EventDefinition ev)
{ {
if (ev == null) if (ev == null)
throw new ArgumentNullException(nameof(ev)); throw new ArgumentNullException(nameof(ev));
this.ev = ev; this.EventDefinition = ev;
if (ev.AddMethod != null) if (ev.AddMethod != null)
this.Children.Add(new MethodTreeNode(ev.AddMethod)); this.Children.Add(new MethodTreeNode(ev.AddMethod));
@ -48,25 +47,16 @@ namespace ICSharpCode.ILSpy.TreeNodes
} }
} }
public EventDefinition EventDefinition public EventDefinition EventDefinition { get; }
{
get { return ev; }
}
public override object Text public override object Text => GetText(EventDefinition, this.Language) + EventDefinition.MetadataToken.ToSuffixString();
{
get { return GetText(ev, this.Language) + ev.MetadataToken.ToSuffixString(); }
}
public static object GetText(EventDefinition eventDef, Language language) public static object GetText(EventDefinition eventDef, Language language)
{ {
return HighlightSearchMatch(eventDef.Name, " : " + language.TypeToString(eventDef.EventType, false, eventDef)); return HighlightSearchMatch(eventDef.Name, " : " + language.TypeToString(eventDef.EventType, false, eventDef));
} }
public override object Icon public override object Icon => GetIcon(EventDefinition);
{
get { return GetIcon(ev); }
}
public static ImageSource GetIcon(EventDefinition eventDef) public static ImageSource GetIcon(EventDefinition eventDef)
{ {
@ -100,7 +90,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override FilterResult Filter(FilterSettings settings) public override FilterResult Filter(FilterSettings settings)
{ {
if (settings.SearchTermMatches(ev.Name) && settings.Language.ShowMember(ev)) if (settings.SearchTermMatches(EventDefinition.Name) && settings.Language.ShowMember(EventDefinition))
return FilterResult.Match; return FilterResult.Match;
else else
return FilterResult.Hidden; return FilterResult.Hidden;
@ -108,20 +98,17 @@ 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.DecompileEvent(ev, output, options); language.DecompileEvent(EventDefinition, output, options);
} }
public override bool IsPublicAPI { public override bool IsPublicAPI {
get { get {
MethodDefinition accessor = ev.AddMethod ?? ev.RemoveMethod; MethodDefinition accessor = EventDefinition.AddMethod ?? EventDefinition.RemoveMethod;
return accessor != null && (accessor.IsPublic || accessor.IsFamilyOrAssembly || accessor.IsFamily); return accessor != null && (accessor.IsPublic || accessor.IsFamilyOrAssembly || accessor.IsFamily);
} }
} }
MemberReference IMemberTreeNode.Member MemberReference IMemberTreeNode.Member => EventDefinition;
{
get { return ev; }
}
} }
} }

29
ILSpy/TreeNodes/FieldTreeNode.cs

@ -28,34 +28,26 @@ namespace ICSharpCode.ILSpy.TreeNodes
/// </summary> /// </summary>
public sealed class FieldTreeNode : ILSpyTreeNode, IMemberTreeNode public sealed class FieldTreeNode : ILSpyTreeNode, IMemberTreeNode
{ {
readonly FieldDefinition field; public FieldDefinition FieldDefinition { get; }
public FieldDefinition FieldDefinition
{
get { return field; }
}
public FieldTreeNode(FieldDefinition field) public FieldTreeNode(FieldDefinition field)
{ {
if (field == null) if (field == null)
throw new ArgumentNullException(nameof(field)); throw new ArgumentNullException(nameof(field));
this.field = field; this.FieldDefinition = field;
} }
public override object Text public override object Text
{ {
get { get {
return HighlightSearchMatch( return HighlightSearchMatch(
field.Name, FieldDefinition.Name,
" : " + this.Language.TypeToString(field.FieldType, false, field) + field.MetadataToken.ToSuffixString() " : " + this.Language.TypeToString(FieldDefinition.FieldType, false, FieldDefinition) + FieldDefinition.MetadataToken.ToSuffixString()
); );
} }
} }
public override object Icon public override object Icon => GetIcon(FieldDefinition);
{
get { return GetIcon(field); }
}
public static ImageSource GetIcon(FieldDefinition field) public static ImageSource GetIcon(FieldDefinition field)
{ {
@ -112,7 +104,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override FilterResult Filter(FilterSettings settings) public override FilterResult Filter(FilterSettings settings)
{ {
if (settings.SearchTermMatches(field.Name) && settings.Language.ShowMember(field)) if (settings.SearchTermMatches(FieldDefinition.Name) && settings.Language.ShowMember(FieldDefinition))
return FilterResult.Match; return FilterResult.Match;
else else
return FilterResult.Hidden; return FilterResult.Hidden;
@ -120,18 +112,15 @@ 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.DecompileField(field, output, options); language.DecompileField(FieldDefinition, output, options);
} }
public override bool IsPublicAPI { public override bool IsPublicAPI {
get { get {
return field.IsPublic || field.IsFamily || field.IsFamilyOrAssembly; return FieldDefinition.IsPublic || FieldDefinition.IsFamily || FieldDefinition.IsFamilyOrAssembly;
} }
} }
MemberReference IMemberTreeNode.Member MemberReference IMemberTreeNode.Member => FieldDefinition;
{
get { return field; }
}
} }
} }

34
ILSpy/TreeNodes/MethodTreeNode.cs

@ -32,27 +32,16 @@ namespace ICSharpCode.ILSpy.TreeNodes
/// </summary> /// </summary>
public sealed class MethodTreeNode : ILSpyTreeNode, IMemberTreeNode public sealed class MethodTreeNode : ILSpyTreeNode, IMemberTreeNode
{ {
readonly MethodDefinition method; public MethodDefinition MethodDefinition { get; }
public MethodDefinition MethodDefinition
{
get { return method; }
}
public MethodTreeNode(MethodDefinition method) public MethodTreeNode(MethodDefinition method)
{ {
if (method == null) if (method == null)
throw new ArgumentNullException(nameof(method)); throw new ArgumentNullException(nameof(method));
this.method = method; this.MethodDefinition = method;
} }
public override object Text public override object Text => GetText(MethodDefinition, Language) + MethodDefinition.MetadataToken.ToSuffixString();
{
get
{
return GetText(method, Language);
}
}
public static object GetText(MethodDefinition method, Language language) public static object GetText(MethodDefinition method, Language language)
{ {
@ -74,14 +63,10 @@ namespace ICSharpCode.ILSpy.TreeNodes
b.Append(") : "); b.Append(") : ");
b.Append(language.TypeToString(method.ReturnType, false, method.MethodReturnType)); b.Append(language.TypeToString(method.ReturnType, false, method.MethodReturnType));
} }
b.Append(method.MetadataToken.ToSuffixString());
return HighlightSearchMatch(language.FormatMethodName(method), b.ToString()); return HighlightSearchMatch(language.FormatMethodName(method), b.ToString());
} }
public override object Icon public override object Icon => GetIcon(MethodDefinition);
{
get { return GetIcon(method); }
}
public static ImageSource GetIcon(MethodDefinition method) public static ImageSource GetIcon(MethodDefinition method)
{ {
@ -136,12 +121,12 @@ 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.DecompileMethod(method, output, options); language.DecompileMethod(MethodDefinition, output, options);
} }
public override FilterResult Filter(FilterSettings settings) public override FilterResult Filter(FilterSettings settings)
{ {
if (settings.SearchTermMatches(method.Name) && settings.Language.ShowMember(method)) if (settings.SearchTermMatches(MethodDefinition.Name) && settings.Language.ShowMember(MethodDefinition))
return FilterResult.Match; return FilterResult.Match;
else else
return FilterResult.Hidden; return FilterResult.Hidden;
@ -149,13 +134,10 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override bool IsPublicAPI { public override bool IsPublicAPI {
get { get {
return method.IsPublic || method.IsFamily || method.IsFamilyOrAssembly; return MethodDefinition.IsPublic || MethodDefinition.IsFamily || MethodDefinition.IsFamilyOrAssembly;
} }
} }
MemberReference IMemberTreeNode.Member MemberReference IMemberTreeNode.Member => MethodDefinition;
{
get { return method; }
}
} }
} }

30
ILSpy/TreeNodes/PropertyTreeNode.cs

@ -28,14 +28,13 @@ namespace ICSharpCode.ILSpy.TreeNodes
/// </summary> /// </summary>
public sealed class PropertyTreeNode : ILSpyTreeNode, IMemberTreeNode public sealed class PropertyTreeNode : ILSpyTreeNode, IMemberTreeNode
{ {
readonly PropertyDefinition property;
readonly bool isIndexer; readonly bool isIndexer;
public PropertyTreeNode(PropertyDefinition property) public PropertyTreeNode(PropertyDefinition property)
{ {
if (property == null) if (property == null)
throw new ArgumentNullException(nameof(property)); throw new ArgumentNullException(nameof(property));
this.property = property; this.PropertyDefinition = property;
using (LoadedAssembly.DisableAssemblyLoad()) { using (LoadedAssembly.DisableAssemblyLoad()) {
this.isIndexer = property.IsIndexer(); this.isIndexer = property.IsIndexer();
} }
@ -48,17 +47,11 @@ namespace ICSharpCode.ILSpy.TreeNodes
foreach (var m in property.OtherMethods) foreach (var m in property.OtherMethods)
this.Children.Add(new MethodTreeNode(m)); this.Children.Add(new MethodTreeNode(m));
} }
} }
public PropertyDefinition PropertyDefinition { public PropertyDefinition PropertyDefinition { get; }
get { return property; }
}
public override object Text public override object Text => GetText(PropertyDefinition, Language, isIndexer) + PropertyDefinition.MetadataToken.ToSuffixString();
{
get { return GetText(property, Language, isIndexer) + property.MetadataToken.ToSuffixString(); }
}
public static object GetText(PropertyDefinition property, Language language, bool? isIndexer = null) public static object GetText(PropertyDefinition property, Language language, bool? isIndexer = null)
{ {
@ -88,15 +81,11 @@ namespace ICSharpCode.ILSpy.TreeNodes
b.Append(" : "); b.Append(" : ");
} }
b.Append(language.TypeToString(property.PropertyType, false, property)); b.Append(language.TypeToString(property.PropertyType, false, property));
b.Append(property.MetadataToken.ToSuffixString());
return HighlightSearchMatch(name, b.ToString()); return HighlightSearchMatch(name, b.ToString());
} }
public override object Icon public override object Icon => GetIcon(PropertyDefinition);
{
get { return GetIcon(property); }
}
public static ImageSource GetIcon(PropertyDefinition property, bool isIndexer = false) public static ImageSource GetIcon(PropertyDefinition property, bool isIndexer = false)
{ {
@ -169,7 +158,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override FilterResult Filter(FilterSettings settings) public override FilterResult Filter(FilterSettings settings)
{ {
if (settings.SearchTermMatches(property.Name) && settings.Language.ShowMember(property)) if (settings.SearchTermMatches(PropertyDefinition.Name) && settings.Language.ShowMember(PropertyDefinition))
return FilterResult.Match; return FilterResult.Match;
else else
return FilterResult.Hidden; return FilterResult.Hidden;
@ -177,12 +166,12 @@ 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.DecompileProperty(property, output, options); language.DecompileProperty(PropertyDefinition, output, options);
} }
public override bool IsPublicAPI { public override bool IsPublicAPI {
get { get {
switch (GetAttributesOfMostAccessibleMethod(property) & MethodAttributes.MemberAccessMask) { switch (GetAttributesOfMostAccessibleMethod(PropertyDefinition) & MethodAttributes.MemberAccessMask) {
case MethodAttributes.Public: case MethodAttributes.Public:
case MethodAttributes.Family: case MethodAttributes.Family:
case MethodAttributes.FamORAssem: case MethodAttributes.FamORAssem:
@ -193,9 +182,6 @@ namespace ICSharpCode.ILSpy.TreeNodes
} }
} }
MemberReference IMemberTreeNode.Member MemberReference IMemberTreeNode.Member => PropertyDefinition;
{
get { return property; }
}
} }
} }

4
ILSpy/TreeNodes/SearchMsdnContextMenuEntry.cs

@ -92,9 +92,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
if (namespaceNode != null) if (namespaceNode != null)
address = string.Format(msdnAddress, namespaceNode.Name); address = string.Format(msdnAddress, namespaceNode.Name);
var memberNode = node as IMemberTreeNode; if (node is IMemberTreeNode memberNode) {
if (memberNode != null)
{
var member = memberNode.Member; var member = memberNode.Member;
var memberName = string.Empty; var memberName = string.Empty;

72
ILSpy/TreeNodes/TypeTreeNode.cs

@ -28,8 +28,6 @@ namespace ICSharpCode.ILSpy.TreeNodes
{ {
public sealed class TypeTreeNode : ILSpyTreeNode, IMemberTreeNode public sealed class TypeTreeNode : ILSpyTreeNode, IMemberTreeNode
{ {
readonly TypeDefinition type;
readonly AssemblyTreeNode parentAssemblyNode;
public TypeTreeNode(TypeDefinition type, AssemblyTreeNode parentAssemblyNode) public TypeTreeNode(TypeDefinition type, AssemblyTreeNode parentAssemblyNode)
{ {
@ -37,34 +35,24 @@ namespace ICSharpCode.ILSpy.TreeNodes
throw new ArgumentNullException(nameof(parentAssemblyNode)); throw new ArgumentNullException(nameof(parentAssemblyNode));
if (type == null) if (type == null)
throw new ArgumentNullException(nameof(type)); throw new ArgumentNullException(nameof(type));
this.type = type; this.TypeDefinition = type;
this.parentAssemblyNode = parentAssemblyNode; this.ParentAssemblyNode = parentAssemblyNode;
this.LazyLoading = true; this.LazyLoading = true;
} }
public TypeDefinition TypeDefinition { public TypeDefinition TypeDefinition { get; }
get { return type; }
}
public AssemblyTreeNode ParentAssemblyNode { public AssemblyTreeNode ParentAssemblyNode { get; }
get { return parentAssemblyNode; }
}
public string Name { public string Name => TypeDefinition.Name;
get { return type.Name; }
}
public string Namespace { public string Namespace => TypeDefinition.Namespace;
get { return type.Namespace; }
}
public override object Text { public override object Text => HighlightSearchMatch(this.Language.FormatTypeName(TypeDefinition), TypeDefinition.MetadataToken.ToSuffixString());
get { return HighlightSearchMatch(this.Language.FormatTypeName(type), type.MetadataToken.ToSuffixString()); }
}
public override bool IsPublicAPI { public override bool IsPublicAPI {
get { get {
switch (type.Attributes & TypeAttributes.VisibilityMask) { switch (TypeDefinition.Attributes & TypeAttributes.VisibilityMask) {
case TypeAttributes.Public: case TypeAttributes.Public:
case TypeAttributes.NestedPublic: case TypeAttributes.NestedPublic:
case TypeAttributes.NestedFamily: case TypeAttributes.NestedFamily:
@ -80,8 +68,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
{ {
if (!settings.ShowInternalApi && !IsPublicAPI) if (!settings.ShowInternalApi && !IsPublicAPI)
return FilterResult.Hidden; return FilterResult.Hidden;
if (settings.SearchTermMatches(type.Name)) { if (settings.SearchTermMatches(TypeDefinition.Name)) {
if (settings.Language.ShowMember(type)) if (settings.Language.ShowMember(TypeDefinition))
return FilterResult.Match; return FilterResult.Match;
else else
return FilterResult.Hidden; return FilterResult.Hidden;
@ -92,45 +80,39 @@ namespace ICSharpCode.ILSpy.TreeNodes
protected override void LoadChildren() protected override void LoadChildren()
{ {
if (type.BaseType != null || type.HasInterfaces) if (TypeDefinition.BaseType != null || TypeDefinition.HasInterfaces)
this.Children.Add(new BaseTypesTreeNode(type)); this.Children.Add(new BaseTypesTreeNode(TypeDefinition));
if (!type.IsSealed) if (!TypeDefinition.IsSealed)
this.Children.Add(new DerivedTypesTreeNode(parentAssemblyNode.AssemblyList, type)); this.Children.Add(new DerivedTypesTreeNode(ParentAssemblyNode.AssemblyList, TypeDefinition));
foreach (TypeDefinition nestedType in type.NestedTypes.OrderBy(m => m.Name, NaturalStringComparer.Instance)) { foreach (TypeDefinition nestedType in TypeDefinition.NestedTypes.OrderBy(m => m.Name, NaturalStringComparer.Instance)) {
this.Children.Add(new TypeTreeNode(nestedType, parentAssemblyNode)); this.Children.Add(new TypeTreeNode(nestedType, ParentAssemblyNode));
} }
foreach (FieldDefinition field in type.Fields.OrderBy(m => m.Name, NaturalStringComparer.Instance)) { foreach (FieldDefinition field in TypeDefinition.Fields.OrderBy(m => m.Name, NaturalStringComparer.Instance)) {
this.Children.Add(new FieldTreeNode(field)); this.Children.Add(new FieldTreeNode(field));
} }
foreach (PropertyDefinition property in type.Properties.OrderBy(m => m.Name, NaturalStringComparer.Instance)) { foreach (PropertyDefinition property in TypeDefinition.Properties.OrderBy(m => m.Name, NaturalStringComparer.Instance)) {
this.Children.Add(new PropertyTreeNode(property)); this.Children.Add(new PropertyTreeNode(property));
} }
foreach (EventDefinition ev in type.Events.OrderBy(m => m.Name, NaturalStringComparer.Instance)) { foreach (EventDefinition ev in TypeDefinition.Events.OrderBy(m => m.Name, NaturalStringComparer.Instance)) {
this.Children.Add(new EventTreeNode(ev)); this.Children.Add(new EventTreeNode(ev));
} }
HashSet<MethodDefinition> accessorMethods = type.GetAccessorMethods(); HashSet<MethodDefinition> accessorMethods = TypeDefinition.GetAccessorMethods();
foreach (MethodDefinition method in type.Methods.OrderBy(m => m.Name, NaturalStringComparer.Instance)) { foreach (MethodDefinition method in TypeDefinition.Methods.OrderBy(m => m.Name, NaturalStringComparer.Instance)) {
if (!accessorMethods.Contains(method)) { if (!accessorMethods.Contains(method)) {
this.Children.Add(new MethodTreeNode(method)); this.Children.Add(new MethodTreeNode(method));
} }
} }
} }
public override bool CanExpandRecursively { public override bool CanExpandRecursively => true;
get { return true; }
}
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(TypeDefinition, output, options);
} }
#region Icon public override object Icon => GetIcon(TypeDefinition);
public override object Icon
{
get { return GetIcon(type); }
}
public static ImageSource GetIcon(TypeDefinition type) public static ImageSource GetIcon(TypeDefinition type)
{ {
@ -195,10 +177,6 @@ namespace ICSharpCode.ILSpy.TreeNodes
return type.IsSealed && type.IsAbstract; return type.IsSealed && type.IsAbstract;
} }
#endregion MemberReference IMemberTreeNode.Member => TypeDefinition;
MemberReference IMemberTreeNode.Member {
get { return type; }
}
} }
} }

Loading…
Cancel
Save