Browse Source

Fix CSharpLanguage.GetEntityName to return ~TypeName for destructors.

pull/1405/head
Siegfried Pammer 7 years ago
parent
commit
f716f4ed9c
  1. 4
      ICSharpCode.Decompiler/Metadata/MetadataExtensions.cs
  2. 45
      ILSpy/Languages/CSharpLanguage.cs

4
ICSharpCode.Decompiler/Metadata/MetadataExtensions.cs

@ -152,6 +152,10 @@ namespace ICSharpCode.Decompiler.Metadata
get => minimalCorlibTypeProvider; get => minimalCorlibTypeProvider;
} }
public static ISignatureTypeProvider<IType, TypeSystem.GenericContext> MinimalSignatureTypeProvider {
get => minimalCorlibTypeProvider;
}
public static PrimitiveTypeCode ToPrimitiveTypeCode(this KnownTypeCode typeCode) public static PrimitiveTypeCode ToPrimitiveTypeCode(this KnownTypeCode typeCode)
{ {
switch (typeCode) { switch (typeCode) {

45
ILSpy/Languages/CSharpLanguage.cs

@ -21,6 +21,7 @@ using System.Collections.Generic;
using System.ComponentModel.Composition; using System.ComponentModel.Composition;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Reflection;
using System.Reflection.Metadata; using System.Reflection.Metadata;
using System.Text; using System.Text;
using System.Windows; using System.Windows;
@ -562,22 +563,36 @@ 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);
if (methodName == ".ctor" || methodName == ".cctor") { switch (methodName) {
var td = metadata.GetTypeDefinition(declaringType); case ".ctor":
methodName = ReflectionHelper.SplitTypeParameterCountFromReflectionName(metadata.GetString(td.Name)); case ".cctor":
} else { var td = metadata.GetTypeDefinition(declaringType);
var genericParams = md.GetGenericParameters(); methodName = ReflectionHelper.SplitTypeParameterCountFromReflectionName(metadata.GetString(td.Name));
if (genericParams.Count > 0) { break;
methodName += "<"; case "Finalize":
int i = 0; const MethodAttributes finalizerAttributes = (MethodAttributes.Virtual | MethodAttributes.Family | MethodAttributes.HideBySig);
foreach (var h in genericParams) { if ((md.Attributes & finalizerAttributes) != finalizerAttributes)
if (i > 0) goto default;
methodName += ","; MethodSignature<IType> methodSignature = md.DecodeSignature(MetadataExtensions.MinimalSignatureTypeProvider, default);
var gp = metadata.GetGenericParameter(h); if (methodSignature.GenericParameterCount != 0 || methodSignature.ParameterTypes.Length != 0)
methodName += metadata.GetString(gp.Name); goto default;
td = metadata.GetTypeDefinition(declaringType);
methodName = "~" + ReflectionHelper.SplitTypeParameterCountFromReflectionName(metadata.GetString(td.Name));
break;
default:
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 += ">"; break;
}
} }
if (fullName) if (fullName)
return ToCSharpString(metadata, declaringType, fullName) + "." + methodName; return ToCSharpString(metadata, declaringType, fullName) + "." + methodName;

Loading…
Cancel
Save