Browse Source

Remove legacy code from MethodTreeNode and TypeTreeNode

pull/1198/head
Siegfried Pammer 7 years ago
parent
commit
a531dbde2f
  1. 53
      ILSpy/TreeNodes/MethodTreeNode.cs
  2. 26
      ILSpy/TreeNodes/TypeTreeNode.cs

53
ILSpy/TreeNodes/MethodTreeNode.cs

@ -54,54 +54,39 @@ namespace ICSharpCode.ILSpy.TreeNodes
public static ImageSource GetIcon(IMethod method) public static ImageSource GetIcon(IMethod method)
{ {
var metadata = ((MetadataAssembly)method.ParentAssembly).PEFile.Metadata; if (method.IsOperator)
var methodDefinition = metadata.GetMethodDefinition((MethodDefinitionHandle)method.MetadataToken); return Images.GetIcon(MemberIcon.Operator, GetOverlayIcon(method), false);
var methodName = metadata.GetString(methodDefinition.Name);
if (methodDefinition.HasFlag(MethodAttributes.SpecialName) && methodName.StartsWith("op_", StringComparison.Ordinal)) {
return Images.GetIcon(MemberIcon.Operator, GetOverlayIcon(methodDefinition.Attributes), false);
}
if (methodDefinition.IsExtensionMethod(metadata)) {
return Images.GetIcon(MemberIcon.ExtensionMethod, GetOverlayIcon(methodDefinition.Attributes), false);
}
if (methodDefinition.HasFlag(MethodAttributes.SpecialName) && if (method.IsExtensionMethod)
(methodName == ".ctor" || methodName == ".cctor")) { return Images.GetIcon(MemberIcon.ExtensionMethod, GetOverlayIcon(method), false);
return Images.GetIcon(MemberIcon.Constructor, GetOverlayIcon(methodDefinition.Attributes), methodDefinition.HasFlag(MethodAttributes.Static));
}
if (methodDefinition.HasFlag(MethodAttributes.PinvokeImpl) && !methodDefinition.GetImport().Module.IsNil) if (method.IsConstructor)
return Images.GetIcon(MemberIcon.PInvokeMethod, GetOverlayIcon(methodDefinition.Attributes), true); return Images.GetIcon(MemberIcon.Constructor, GetOverlayIcon(method), method.IsStatic);
bool showAsVirtual = methodDefinition.HasFlag(MethodAttributes.Virtual) if (!method.HasBody && method.HasAttribute(KnownAttribute.DllImport))
&& !(methodDefinition.HasFlag(MethodAttributes.NewSlot) && methodDefinition.HasFlag(MethodAttributes.Final)) return Images.GetIcon(MemberIcon.PInvokeMethod, GetOverlayIcon(method), true);
&& (metadata.GetTypeDefinition(methodDefinition.GetDeclaringType()).Attributes & TypeAttributes.ClassSemanticsMask) != TypeAttributes.Interface;
return Images.GetIcon( return Images.GetIcon(method.IsVirtual ? MemberIcon.VirtualMethod : MemberIcon.Method,
showAsVirtual ? MemberIcon.VirtualMethod : MemberIcon.Method, GetOverlayIcon(method), method.IsStatic);
GetOverlayIcon(methodDefinition.Attributes),
methodDefinition.HasFlag(MethodAttributes.Static));
} }
private static AccessOverlayIcon GetOverlayIcon(MethodAttributes methodAttributes) static AccessOverlayIcon GetOverlayIcon(IMethod method)
{ {
switch (methodAttributes & MethodAttributes.MemberAccessMask) { switch (method.Accessibility) {
case MethodAttributes.Public: case Accessibility.Public:
return AccessOverlayIcon.Public; return AccessOverlayIcon.Public;
case MethodAttributes.Assembly: case Accessibility.Internal:
return AccessOverlayIcon.Internal; return AccessOverlayIcon.Internal;
case MethodAttributes.FamANDAssem: case Accessibility.ProtectedAndInternal:
return AccessOverlayIcon.PrivateProtected; return AccessOverlayIcon.PrivateProtected;
case MethodAttributes.Family: case Accessibility.Protected:
return AccessOverlayIcon.Protected; return AccessOverlayIcon.Protected;
case MethodAttributes.FamORAssem: case Accessibility.ProtectedOrInternal:
return AccessOverlayIcon.ProtectedInternal; return AccessOverlayIcon.ProtectedInternal;
case MethodAttributes.Private: case Accessibility.Private:
return AccessOverlayIcon.Private; return AccessOverlayIcon.Private;
case 0:
return AccessOverlayIcon.CompilerControlled;
default: default:
throw new NotSupportedException(); return AccessOverlayIcon.CompilerControlled;
} }
} }

26
ILSpy/TreeNodes/TypeTreeNode.cs

@ -105,10 +105,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
public static ImageSource GetIcon(ITypeDefinition type) public static ImageSource GetIcon(ITypeDefinition type)
{ {
TypeIcon typeIcon = GetTypeIcon(type); return Images.GetIcon(GetTypeIcon(type), GetOverlayIcon(type));
AccessOverlayIcon overlayIcon = GetOverlayIcon(type);
return Images.GetIcon(typeIcon, overlayIcon);
} }
internal static TypeIcon GetTypeIcon(IType type) internal static TypeIcon GetTypeIcon(IType type)
@ -129,30 +126,23 @@ namespace ICSharpCode.ILSpy.TreeNodes
} }
} }
private static AccessOverlayIcon GetOverlayIcon(ITypeDefinition type) static AccessOverlayIcon GetOverlayIcon(ITypeDefinition type)
{ {
AccessOverlayIcon overlay;
switch (type.Accessibility) { switch (type.Accessibility) {
case Accessibility.Public: case Accessibility.Public:
overlay = AccessOverlayIcon.Public; return AccessOverlayIcon.Public;
break;
case Accessibility.Internal: case Accessibility.Internal:
overlay = AccessOverlayIcon.Internal; return AccessOverlayIcon.Internal;
break;
case Accessibility.ProtectedAndInternal: case Accessibility.ProtectedAndInternal:
overlay = AccessOverlayIcon.PrivateProtected; return AccessOverlayIcon.PrivateProtected;
break;
case Accessibility.Protected: case Accessibility.Protected:
case Accessibility.ProtectedOrInternal: case Accessibility.ProtectedOrInternal:
overlay = AccessOverlayIcon.Protected; return AccessOverlayIcon.Protected;
break;
case Accessibility.Private: case Accessibility.Private:
overlay = AccessOverlayIcon.Private; return AccessOverlayIcon.Private;
break;
default: default:
throw new NotSupportedException(); return AccessOverlayIcon.CompilerControlled;
} }
return overlay;
} }
IEntity IMemberTreeNode.Member => TypeDefinition; IEntity IMemberTreeNode.Member => TypeDefinition;

Loading…
Cancel
Save