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. 19
      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) {

19
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,10 +563,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);
if (methodName == ".ctor" || methodName == ".cctor") { switch (methodName) {
case ".ctor":
case ".cctor":
var td = metadata.GetTypeDefinition(declaringType); var td = metadata.GetTypeDefinition(declaringType);
methodName = ReflectionHelper.SplitTypeParameterCountFromReflectionName(metadata.GetString(td.Name)); methodName = ReflectionHelper.SplitTypeParameterCountFromReflectionName(metadata.GetString(td.Name));
} else { break;
case "Finalize":
const MethodAttributes finalizerAttributes = (MethodAttributes.Virtual | MethodAttributes.Family | MethodAttributes.HideBySig);
if ((md.Attributes & finalizerAttributes) != finalizerAttributes)
goto default;
MethodSignature<IType> methodSignature = md.DecodeSignature(MetadataExtensions.MinimalSignatureTypeProvider, default);
if (methodSignature.GenericParameterCount != 0 || methodSignature.ParameterTypes.Length != 0)
goto default;
td = metadata.GetTypeDefinition(declaringType);
methodName = "~" + ReflectionHelper.SplitTypeParameterCountFromReflectionName(metadata.GetString(td.Name));
break;
default:
var genericParams = md.GetGenericParameters(); var genericParams = md.GetGenericParameters();
if (genericParams.Count > 0) { if (genericParams.Count > 0) {
methodName += "<"; methodName += "<";
@ -578,6 +592,7 @@ namespace ICSharpCode.ILSpy
} }
methodName += ">"; methodName += ">";
} }
break;
} }
if (fullName) if (fullName)
return ToCSharpString(metadata, declaringType, fullName) + "." + methodName; return ToCSharpString(metadata, declaringType, fullName) + "." + methodName;

Loading…
Cancel
Save