From d2a0f017d4d36b5b84a4dd59c850cc4a8b5bd4d9 Mon Sep 17 00:00:00 2001 From: SilverFox Date: Fri, 19 Mar 2021 13:58:35 +0800 Subject: [PATCH 1/2] Fix url of SearchMsdn when do search with generic types and .ctor methods --- ILSpy/Commands/SearchMsdnContextMenuEntry.cs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/ILSpy/Commands/SearchMsdnContextMenuEntry.cs b/ILSpy/Commands/SearchMsdnContextMenuEntry.cs index 1e5e9d73d..919780e39 100644 --- a/ILSpy/Commands/SearchMsdnContextMenuEntry.cs +++ b/ILSpy/Commands/SearchMsdnContextMenuEntry.cs @@ -102,19 +102,16 @@ namespace ICSharpCode.ILSpy { var address = string.Empty; - var namespaceNode = node as NamespaceTreeNode; - if (namespaceNode != null) + if (node is NamespaceTreeNode namespaceNode) + { address = string.Format(msdnAddress, namespaceNode.Name); - - if (node is IMemberTreeNode memberNode) + } + else if (node is IMemberTreeNode memberNode) { var member = memberNode.Member; - var memberName = string.Empty; - - if (member.DeclaringType == null) - memberName = member.FullName; - else - memberName = string.Format("{0}.{1}", member.DeclaringType.FullName, member.Name); + var memberName = member.ReflectionName.Replace('`', '-').Replace('+', '.'); + if (memberName.EndsWith("..ctor", System.StringComparison.Ordinal)) + memberName = memberName.Substring(0, memberName.Length - 5) + "-ctor"; address = string.Format(msdnAddress, memberName); } From dd06b9ad79199a23ba4c8fa503ee9bfb842fc98e Mon Sep 17 00:00:00 2001 From: SilverFox Date: Fri, 19 Mar 2021 19:09:46 +0800 Subject: [PATCH 2/2] Disallow members of delegate or enum for SearchMSDN --- ILSpy/Commands/SearchMsdnContextMenuEntry.cs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/ILSpy/Commands/SearchMsdnContextMenuEntry.cs b/ILSpy/Commands/SearchMsdnContextMenuEntry.cs index 919780e39..8094f4dae 100644 --- a/ILSpy/Commands/SearchMsdnContextMenuEntry.cs +++ b/ILSpy/Commands/SearchMsdnContextMenuEntry.cs @@ -56,13 +56,13 @@ namespace ICSharpCode.ILSpy if (node is EventTreeNode eventNode && (!eventNode.IsPublicAPI || !IsAccessible(eventNode.EventDefinition))) return false; - if (node is FieldTreeNode fieldNode && (!fieldNode.IsPublicAPI || !IsAccessible(fieldNode.FieldDefinition))) + if (node is FieldTreeNode fieldNode && (!fieldNode.IsPublicAPI || !IsAccessible(fieldNode.FieldDefinition) || IsDelegateOrEnumMember(fieldNode.FieldDefinition))) return false; if (node is PropertyTreeNode propertyNode && (!propertyNode.IsPublicAPI || !IsAccessible(propertyNode.PropertyDefinition))) return false; - if (node is MethodTreeNode methodNode && (!methodNode.IsPublicAPI || !IsAccessible(methodNode.MethodDefinition))) + if (node is MethodTreeNode methodNode && (!methodNode.IsPublicAPI || !IsAccessible(methodNode.MethodDefinition) || IsDelegateOrEnumMember(methodNode.MethodDefinition))) return false; if (node is NamespaceTreeNode namespaceNode && string.IsNullOrEmpty(namespaceNode.Name)) @@ -87,6 +87,20 @@ namespace ICSharpCode.ILSpy } } + bool IsDelegateOrEnumMember(IMember member) + { + if (member.DeclaringTypeDefinition == null) + return false; + switch (member.DeclaringTypeDefinition.Kind) + { + case TypeKind.Delegate: + case TypeKind.Enum: + return true; + default: + return false; + } + } + public void Execute(TextViewContext context) { if (context.SelectedTreeNodes != null)