diff --git a/ILSpy/Languages/ILLanguage.cs b/ILSpy/Languages/ILLanguage.cs
index 994c12718..5edb66017 100644
--- a/ILSpy/Languages/ILLanguage.cs
+++ b/ILSpy/Languages/ILLanguage.cs
@@ -62,30 +62,36 @@ namespace ILSpy.Languages
};
}
- public override void DecompileMethod(IMethod method, ITextOutput output, DecompilationOptions options)
+ ///
+ /// Creates a disassembler wired to 's assembly resolver and
+ /// debug info — the setup shared by every member-level Decompile* entry point.
+ ///
+ ReflectionDisassembler CreateDisassembler(ITextOutput output, DecompilationOptions options, MetadataFile module)
{
var dis = CreateDisassembler(output, options);
- MetadataFile module = method.ParentModule!.MetadataFile!;
dis.AssemblyResolver = module.GetAssemblyResolver();
dis.DebugInfo = module.GetDebugInfoOrNull();
+ return dis;
+ }
+
+ public override void DecompileMethod(IMethod method, ITextOutput output, DecompilationOptions options)
+ {
+ MetadataFile module = method.ParentModule!.MetadataFile!;
+ var dis = CreateDisassembler(output, options, module);
dis.DisassembleMethod(module, (MethodDefinitionHandle)method.MetadataToken);
}
public override void DecompileField(IField field, ITextOutput output, DecompilationOptions options)
{
- var dis = CreateDisassembler(output, options);
MetadataFile module = field.ParentModule!.MetadataFile!;
- dis.AssemblyResolver = module.GetAssemblyResolver();
- dis.DebugInfo = module.GetDebugInfoOrNull();
+ var dis = CreateDisassembler(output, options, module);
dis.DisassembleField(module, (FieldDefinitionHandle)field.MetadataToken);
}
public override void DecompileProperty(IProperty property, ITextOutput output, DecompilationOptions options)
{
- var dis = CreateDisassembler(output, options);
MetadataFile module = property.ParentModule!.MetadataFile!;
- dis.AssemblyResolver = module.GetAssemblyResolver();
- dis.DebugInfo = module.GetDebugInfoOrNull();
+ var dis = CreateDisassembler(output, options, module);
dis.DisassembleProperty(module, (PropertyDefinitionHandle)property.MetadataToken);
var pd = module.Metadata.GetPropertyDefinition((PropertyDefinitionHandle)property.MetadataToken);
var accessors = pd.GetAccessors();
@@ -104,10 +110,8 @@ namespace ILSpy.Languages
public override void DecompileEvent(IEvent ev, ITextOutput output, DecompilationOptions options)
{
- var dis = CreateDisassembler(output, options);
MetadataFile module = ev.ParentModule!.MetadataFile!;
- dis.AssemblyResolver = module.GetAssemblyResolver();
- dis.DebugInfo = module.GetDebugInfoOrNull();
+ var dis = CreateDisassembler(output, options, module);
dis.DisassembleEvent(module, (EventDefinitionHandle)ev.MetadataToken);
var ed = module.Metadata.GetEventDefinition((EventDefinitionHandle)ev.MetadataToken);
@@ -131,21 +135,17 @@ namespace ILSpy.Languages
public override void DecompileType(ITypeDefinition type, ITextOutput output, DecompilationOptions options)
{
- var dis = CreateDisassembler(output, options);
MetadataFile module = type.ParentModule!.MetadataFile!;
- dis.AssemblyResolver = module.GetAssemblyResolver();
- dis.DebugInfo = module.GetDebugInfoOrNull();
+ var dis = CreateDisassembler(output, options, module);
dis.DisassembleType(module, (TypeDefinitionHandle)type.MetadataToken);
}
public override void DecompileNamespace(string nameSpace, IEnumerable types, ITextOutput output, DecompilationOptions options)
{
- var dis = CreateDisassembler(output, options);
- MetadataFile module = types.FirstOrDefault()?.ParentModule!.MetadataFile!;
+ MetadataFile? module = types.FirstOrDefault()?.ParentModule!.MetadataFile;
if (module == null)
return;
- dis.AssemblyResolver = module.GetAssemblyResolver();
- dis.DebugInfo = module.GetDebugInfoOrNull();
+ var dis = CreateDisassembler(output, options, module);
dis.DisassembleNamespace(nameSpace, module, types.Select(t => (TypeDefinitionHandle)t.MetadataToken));
}