diff --git a/ILSpy/Commands/SearchMsdnContextMenuEntry.cs b/ILSpy/Commands/SearchMsdnContextMenuEntry.cs index 1e5e9d73da..8094f4daeb 100644 --- a/ILSpy/Commands/SearchMsdnContextMenuEntry.cs +++ b/ILSpy/Commands/SearchMsdnContextMenuEntry.cs @@ -56,13 +56,13 @@ public bool IsEnabled(TextViewContext context) 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 @@ bool IsAccessible(IEntity entity) } } + 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) @@ -102,19 +116,16 @@ public static void SearchMsdn(ILSpyTreeNode node) { 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); }