Browse Source

#1024: Use DebugInfo in ILLanguage.

pull/1420/head
Siegfried Pammer 7 years ago
parent
commit
3ac85f2dec
  1. 17
      ILSpy/Languages/ILLanguage.cs
  2. 6
      ILSpy/LoadedAssemblyExtensions.cs

17
ILSpy/Languages/ILLanguage.cs

@ -63,15 +63,19 @@ namespace ICSharpCode.ILSpy @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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)

6
ILSpy/LoadedAssemblyExtensions.cs

@ -4,6 +4,7 @@ using System.Linq; @@ -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 @@ -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();

Loading…
Cancel
Save