Browse Source

Fix search on ctors and always show full signature in search result. This should help to find the right overload more easily.

pull/1213/head
Siegfried Pammer 7 years ago
parent
commit
79611d5976
  1. 26
      ILSpy/Languages/CSharpLanguage.cs
  2. 25
      ILSpy/Search/AbstractSearchStrategy.cs

26
ILSpy/Languages/CSharpLanguage.cs

@ -605,19 +605,23 @@ namespace ICSharpCode.ILSpy
var md = metadata.GetMethodDefinition((MethodDefinitionHandle)handle); var md = metadata.GetMethodDefinition((MethodDefinitionHandle)handle);
declaringType = md.GetDeclaringType(); declaringType = md.GetDeclaringType();
string methodName = metadata.GetString(md.Name); string methodName = metadata.GetString(md.Name);
var genericParams = md.GetGenericParameters(); if (methodName == ".ctor" || methodName == ".cctor") {
if (genericParams.Count > 0) { var td = metadata.GetTypeDefinition(declaringType);
methodName += "<"; methodName = ReflectionHelper.SplitTypeParameterCountFromReflectionName(metadata.GetString(td.Name));
int i = 0; } else {
foreach (var h in genericParams) { var genericParams = md.GetGenericParameters();
if (i > 0) if (genericParams.Count > 0) {
methodName += ","; methodName += "<";
var gp = metadata.GetGenericParameter(h); int i = 0;
methodName += metadata.GetString(gp.Name); foreach (var h in genericParams) {
if (i > 0)
methodName += ",";
var gp = metadata.GetGenericParameter(h);
methodName += metadata.GetString(gp.Name);
}
methodName += ">";
} }
methodName += ">";
} }
if (fullName) if (fullName)
return ToCSharpString(metadata, declaringType, fullName) + "." + methodName; return ToCSharpString(metadata, declaringType, fullName) + "." + methodName;
return methodName; return methodName;

25
ILSpy/Search/AbstractSearchStrategy.cs

@ -132,15 +132,22 @@ namespace ICSharpCode.ILSpy.Search
return false; return false;
} }
protected string GetLanguageSpecificName(IEntity member, bool fullName) protected string GetLanguageSpecificName(IEntity member)
{ {
if (member is ITypeDefinition t) switch (member) {
return language.TypeToString(t, includeNamespace: fullName); case ITypeDefinition t:
if (fullName) return language.TypeToString(t, false);
return (member.DeclaringTypeDefinition != null case IField f:
? language.TypeToString(member.DeclaringTypeDefinition, includeNamespace: fullName) + "." : "") return language.FieldToString(f, true, false);
+ member.Name; case IProperty p:
return member.Name; 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) protected ImageSource GetIcon(IEntity member)
@ -179,7 +186,7 @@ namespace ICSharpCode.ILSpy.Search
Member = item, Member = item,
Fitness = CalculateFitness(item), Fitness = CalculateFitness(item),
Image = GetIcon(item), Image = GetIcon(item),
Name = GetLanguageSpecificName(item, fullName: false), Name = GetLanguageSpecificName(item),
LocationImage = declaringType != null ? TypeTreeNode.GetIcon(declaringType) : Images.Namespace, LocationImage = declaringType != null ? TypeTreeNode.GetIcon(declaringType) : Images.Namespace,
Location = declaringType != null ? language.TypeToString(declaringType, includeNamespace: true) : item.Namespace Location = declaringType != null ? language.TypeToString(declaringType, includeNamespace: true) : item.Namespace
}; };

Loading…
Cancel
Save