Browse Source

Fix output of qualified type names in IL.

pull/1198/head
Siegfried Pammer 7 years ago
parent
commit
7dd3faeb69
  1. 4
      ICSharpCode.Decompiler/Disassembler/DomExtensions.cs
  2. 14
      ICSharpCode.Decompiler/Metadata/MetadataExtensions.cs

4
ICSharpCode.Decompiler/Disassembler/DomExtensions.cs

@ -317,6 +317,10 @@ namespace ICSharpCode.Decompiler.Disassembler
currentTypeRef = new Metadata.TypeReference(currentTypeRef.Module, (TypeReferenceHandle)currentTypeRef.ResolutionScope); currentTypeRef = new Metadata.TypeReference(currentTypeRef.Module, (TypeReferenceHandle)currentTypeRef.ResolutionScope);
} }
switch (currentTypeRef.ResolutionScope.Kind) { switch (currentTypeRef.ResolutionScope.Kind) {
case HandleKind.ModuleDefinition:
var modDef = metadata.GetModuleDefinition();
output.Write(DisassemblerHelpers.Escape(metadata.GetString(modDef.Name)));
break;
case HandleKind.ModuleReference: case HandleKind.ModuleReference:
break; break;
case HandleKind.AssemblyReference: case HandleKind.AssemblyReference:

14
ICSharpCode.Decompiler/Metadata/MetadataExtensions.cs

@ -119,16 +119,20 @@ namespace ICSharpCode.Decompiler.Metadata
public static string ToILNameString(this FullTypeName typeName) public static string ToILNameString(this FullTypeName typeName)
{ {
var escapedName = Disassembler.DisassemblerHelpers.Escape(typeName.Name); string escapedName;
if (typeName.TypeParameterCount > 0)
escapedName += "`" + typeName.TypeParameterCount;
if (typeName.IsNested) { if (typeName.IsNested) {
escapedName = Disassembler.DisassemblerHelpers.Escape(typeName.Name);
if (typeName.TypeParameterCount > 0)
escapedName += "`" + typeName.TypeParameterCount;
return $"{typeName.GetDeclaringType().ToILNameString()}/{escapedName}"; return $"{typeName.GetDeclaringType().ToILNameString()}/{escapedName}";
} else if (!string.IsNullOrEmpty(typeName.TopLevelTypeName.Namespace)) { } else if (!string.IsNullOrEmpty(typeName.TopLevelTypeName.Namespace)) {
return $"{typeName.TopLevelTypeName.Namespace}.{escapedName}"; escapedName = Disassembler.DisassemblerHelpers.Escape($"{typeName.TopLevelTypeName.Namespace}.{typeName.Name}");
if (typeName.TypeParameterCount > 0)
escapedName += "`" + typeName.TypeParameterCount;
} else { } else {
return $"{escapedName}"; escapedName = Disassembler.DisassemblerHelpers.Escape(typeName.Name);
} }
return escapedName;
} }
public static AssemblyReferenceHandle GetDeclaringAssembly(this TypeReferenceHandle handle, MetadataReader reader) public static AssemblyReferenceHandle GetDeclaringAssembly(this TypeReferenceHandle handle, MetadataReader reader)

Loading…
Cancel
Save