Browse Source

#3177: Print metadata token of custom attribute in IL output.

pull/3178/head
Siegfried Pammer 1 year ago
parent
commit
89d97b99a0
  1. 8
      ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs

8
ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs

@ -362,7 +362,7 @@ namespace ICSharpCode.Decompiler.Disassembler
foreach (var p in methodDefinition.GetGenericParameters()) foreach (var p in methodDefinition.GetGenericParameters())
{ {
WriteGenericParameterAttributes(module, genericContext, p); WriteGenericParametersAndAttributes(module, genericContext, p);
} }
foreach (var p in methodDefinition.GetParameters()) foreach (var p in methodDefinition.GetParameters())
{ {
@ -1134,7 +1134,7 @@ namespace ICSharpCode.Decompiler.Disassembler
output.WriteLine(); output.WriteLine();
} }
void WriteGenericParameterAttributes(PEFile module, MetadataGenericContext context, GenericParameterHandle handle) void WriteGenericParametersAndAttributes(PEFile module, MetadataGenericContext context, GenericParameterHandle handle)
{ {
var metadata = module.Metadata; var metadata = module.Metadata;
var p = metadata.GetGenericParameter(handle); var p = metadata.GetGenericParameter(handle);
@ -1591,7 +1591,7 @@ namespace ICSharpCode.Decompiler.Disassembler
WriteSecurityDeclarations(module, typeDefinition.GetDeclarativeSecurityAttributes()); WriteSecurityDeclarations(module, typeDefinition.GetDeclarativeSecurityAttributes());
foreach (var tp in typeDefinition.GetGenericParameters()) foreach (var tp in typeDefinition.GetGenericParameters())
{ {
WriteGenericParameterAttributes(module, genericContext, tp); WriteGenericParametersAndAttributes(module, genericContext, tp);
} }
var layout = typeDefinition.GetLayout(); var layout = typeDefinition.GetLayout();
if (!layout.IsDefault) if (!layout.IsDefault)
@ -1808,6 +1808,8 @@ namespace ICSharpCode.Decompiler.Disassembler
foreach (CustomAttributeHandle a in Process(module, attributes)) foreach (CustomAttributeHandle a in Process(module, attributes))
{ {
output.Write(".custom "); output.Write(".custom ");
WriteMetadataToken(output, module, a, MetadataTokens.GetToken(a),
spaceAfter: true, spaceBefore: false, ShowMetadataTokens, ShowMetadataTokensInBase10);
var attr = metadata.GetCustomAttribute(a); var attr = metadata.GetCustomAttribute(a);
attr.Constructor.WriteTo(module, output, default); attr.Constructor.WriteTo(module, output, default);
if (!attr.Value.IsNil) if (!attr.Value.IsNil)

Loading…
Cancel
Save