From 79611d5976265f713aa396a182c84d635047f603 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 15 Jul 2018 20:17:42 +0200 Subject: [PATCH] Fix search on ctors and always show full signature in search result. This should help to find the right overload more easily. --- ILSpy/Languages/CSharpLanguage.cs | 26 +++++++++++++++----------- ILSpy/Search/AbstractSearchStrategy.cs | 25 ++++++++++++++++--------- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/ILSpy/Languages/CSharpLanguage.cs b/ILSpy/Languages/CSharpLanguage.cs index 4dd8b7430..55a1a5a55 100644 --- a/ILSpy/Languages/CSharpLanguage.cs +++ b/ILSpy/Languages/CSharpLanguage.cs @@ -605,19 +605,23 @@ namespace ICSharpCode.ILSpy var md = metadata.GetMethodDefinition((MethodDefinitionHandle)handle); declaringType = md.GetDeclaringType(); string methodName = metadata.GetString(md.Name); - var genericParams = md.GetGenericParameters(); - if (genericParams.Count > 0) { - methodName += "<"; - int i = 0; - foreach (var h in genericParams) { - if (i > 0) - methodName += ","; - var gp = metadata.GetGenericParameter(h); - methodName += metadata.GetString(gp.Name); + if (methodName == ".ctor" || methodName == ".cctor") { + var td = metadata.GetTypeDefinition(declaringType); + methodName = ReflectionHelper.SplitTypeParameterCountFromReflectionName(metadata.GetString(td.Name)); + } else { + var genericParams = md.GetGenericParameters(); + if (genericParams.Count > 0) { + methodName += "<"; + int i = 0; + foreach (var h in genericParams) { + if (i > 0) + methodName += ","; + var gp = metadata.GetGenericParameter(h); + methodName += metadata.GetString(gp.Name); + } + methodName += ">"; } - methodName += ">"; } - if (fullName) return ToCSharpString(metadata, declaringType, fullName) + "." + methodName; return methodName; diff --git a/ILSpy/Search/AbstractSearchStrategy.cs b/ILSpy/Search/AbstractSearchStrategy.cs index c0de48398..89e7cce51 100644 --- a/ILSpy/Search/AbstractSearchStrategy.cs +++ b/ILSpy/Search/AbstractSearchStrategy.cs @@ -132,15 +132,22 @@ namespace ICSharpCode.ILSpy.Search return false; } - protected string GetLanguageSpecificName(IEntity member, bool fullName) + protected string GetLanguageSpecificName(IEntity member) { - if (member is ITypeDefinition t) - return language.TypeToString(t, includeNamespace: fullName); - if (fullName) - return (member.DeclaringTypeDefinition != null - ? language.TypeToString(member.DeclaringTypeDefinition, includeNamespace: fullName) + "." : "") - + member.Name; - return member.Name; + switch (member) { + case ITypeDefinition t: + return language.TypeToString(t, false); + case IField f: + return language.FieldToString(f, true, false); + case IProperty p: + return language.PropertyToString(p, true, false); + case IMethod m: + return language.MethodToString(m, true, false); + case IEvent e: + return language.EventToString(e, true, false); + default: + throw new NotSupportedException(member?.GetType() + " not supported!"); + } } protected ImageSource GetIcon(IEntity member) @@ -179,7 +186,7 @@ namespace ICSharpCode.ILSpy.Search Member = item, Fitness = CalculateFitness(item), Image = GetIcon(item), - Name = GetLanguageSpecificName(item, fullName: false), + Name = GetLanguageSpecificName(item), LocationImage = declaringType != null ? TypeTreeNode.GetIcon(declaringType) : Images.Namespace, Location = declaringType != null ? language.TypeToString(declaringType, includeNamespace: true) : item.Namespace };