From 3ac85f2dec37296bb5d9c6ab31223b33052f415d Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Thu, 19 Jul 2018 08:49:04 +0200 Subject: [PATCH] #1024: Use DebugInfo in ILLanguage. --- ILSpy/Languages/ILLanguage.cs | 17 +++++++++++++---- ILSpy/LoadedAssemblyExtensions.cs | 6 ++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/ILSpy/Languages/ILLanguage.cs b/ILSpy/Languages/ILLanguage.cs index cc4f2ff18..d70fbb424 100644 --- a/ILSpy/Languages/ILLanguage.cs +++ b/ILSpy/Languages/ILLanguage.cs @@ -63,15 +63,19 @@ namespace ICSharpCode.ILSpy public override void DecompileMethod(IMethod method, ITextOutput output, DecompilationOptions options) { var dis = CreateDisassembler(output, options); - dis.AssemblyResolver = method.ParentModule.PEFile.GetAssemblyResolver(); - dis.DisassembleMethod(method.ParentModule.PEFile, (MethodDefinitionHandle)method.MetadataToken); + PEFile module = method.ParentModule.PEFile; + dis.AssemblyResolver = module.GetAssemblyResolver(); + dis.DebugInfo = module.GetDebugInfoOrNull(); + dis.DisassembleMethod(module, (MethodDefinitionHandle)method.MetadataToken); } public override void DecompileField(IField field, ITextOutput output, DecompilationOptions options) { var dis = CreateDisassembler(output, options); - dis.AssemblyResolver = field.ParentModule.PEFile.GetAssemblyResolver(); - dis.DisassembleField(field.ParentModule.PEFile, (FieldDefinitionHandle)field.MetadataToken); + PEFile module = field.ParentModule.PEFile; + dis.AssemblyResolver = module.GetAssemblyResolver(); + dis.DebugInfo = module.GetDebugInfoOrNull(); + dis.DisassembleField(module, (FieldDefinitionHandle)field.MetadataToken); } public override void DecompileProperty(IProperty property, ITextOutput output, DecompilationOptions options) @@ -79,6 +83,7 @@ namespace ICSharpCode.ILSpy var dis = CreateDisassembler(output, options); PEFile module = property.ParentModule.PEFile; dis.AssemblyResolver = module.GetAssemblyResolver(); + dis.DebugInfo = module.GetDebugInfoOrNull(); dis.DisassembleProperty(module, (PropertyDefinitionHandle)property.MetadataToken); var pd = module.Metadata.GetPropertyDefinition((PropertyDefinitionHandle)property.MetadataToken); var accessors = pd.GetAccessors(); @@ -102,6 +107,7 @@ namespace ICSharpCode.ILSpy var dis = CreateDisassembler(output, options); PEFile module = ev.ParentModule.PEFile; dis.AssemblyResolver = module.GetAssemblyResolver(); + dis.DebugInfo = module.GetDebugInfoOrNull(); dis.DisassembleEvent(module, (EventDefinitionHandle)ev.MetadataToken); var ed = ((MetadataReader)module.Metadata).GetEventDefinition((EventDefinitionHandle)ev.MetadataToken); @@ -129,6 +135,7 @@ namespace ICSharpCode.ILSpy var dis = CreateDisassembler(output, options); PEFile module = type.ParentModule.PEFile; dis.AssemblyResolver = module.GetAssemblyResolver(); + dis.DebugInfo = module.GetDebugInfoOrNull(); dis.DisassembleType(module, (TypeDefinitionHandle)type.MetadataToken); } @@ -137,6 +144,7 @@ namespace ICSharpCode.ILSpy var dis = CreateDisassembler(output, options); PEFile module = types.FirstOrDefault()?.ParentModule.PEFile; dis.AssemblyResolver = module.GetAssemblyResolver(); + dis.DebugInfo = module.GetDebugInfoOrNull(); dis.DisassembleNamespace(nameSpace, module, types.Select(t => (TypeDefinitionHandle)t.MetadataToken)); } @@ -151,6 +159,7 @@ namespace ICSharpCode.ILSpy // don't automatically load additional assemblies when an assembly node is selected in the tree view using (options.FullDecompilation ? null : LoadedAssembly.DisableAssemblyLoad()) { dis.AssemblyResolver = module.GetAssemblyResolver(); + dis.DebugInfo = module.GetDebugInfoOrNull(); if (options.FullDecompilation) dis.WriteAssemblyReferences(metadata); if (metadata.IsAssembly) diff --git a/ILSpy/LoadedAssemblyExtensions.cs b/ILSpy/LoadedAssemblyExtensions.cs index 7e101490a..01973aad2 100644 --- a/ILSpy/LoadedAssemblyExtensions.cs +++ b/ILSpy/LoadedAssemblyExtensions.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; +using ICSharpCode.Decompiler.DebugInfo; using ICSharpCode.Decompiler.Metadata; using ICSharpCode.Decompiler.TypeSystem; @@ -16,6 +17,11 @@ namespace ICSharpCode.ILSpy return GetLoadedAssembly(file).GetAssemblyResolver(); } + public static IDebugInfoProvider GetDebugInfoOrNull(this PEFile file) + { + return GetLoadedAssembly(file).GetDebugInfoOrNull(); + } + public static ICompilation GetTypeSystemOrNull(this PEFile file) { return GetLoadedAssembly(file).GetTypeSystemOrNull();