|
|
|
|
@ -22,11 +22,10 @@ using System.Reflection.Metadata.Ecma335;
@@ -22,11 +22,10 @@ using System.Reflection.Metadata.Ecma335;
|
|
|
|
|
using System.Windows.Controls; |
|
|
|
|
using System.Windows.Threading; |
|
|
|
|
|
|
|
|
|
using ICSharpCode.Decompiler; |
|
|
|
|
using ICSharpCode.Decompiler.Metadata; |
|
|
|
|
using ICSharpCode.ILSpy.TextView; |
|
|
|
|
using ICSharpCode.Decompiler.IL; |
|
|
|
|
using ICSharpCode.ILSpy.TreeNodes; |
|
|
|
|
using ICSharpCode.ILSpy.ViewModels; |
|
|
|
|
using ICSharpCode.TreeView; |
|
|
|
|
|
|
|
|
|
namespace ICSharpCode.ILSpy.Metadata |
|
|
|
|
{ |
|
|
|
|
@ -62,6 +61,73 @@ namespace ICSharpCode.ILSpy.Metadata
@@ -62,6 +61,73 @@ namespace ICSharpCode.ILSpy.Metadata
|
|
|
|
|
view.Loaded -= View_Loaded; |
|
|
|
|
this.scrollTarget = default; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
protected static string GenerateTooltip(ref string tooltip, PEFile module, EntityHandle handle) |
|
|
|
|
{ |
|
|
|
|
if (tooltip == null) |
|
|
|
|
{ |
|
|
|
|
if (handle.IsNil) |
|
|
|
|
{ |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
ITextOutput output = new PlainTextOutput(); |
|
|
|
|
var context = new MetadataGenericContext(default(TypeDefinitionHandle), module); |
|
|
|
|
var metadata = module.Metadata; |
|
|
|
|
switch (handle.Kind) |
|
|
|
|
{ |
|
|
|
|
case HandleKind.ModuleDefinition: |
|
|
|
|
output.Write(metadata.GetString(metadata.GetModuleDefinition().Name)); |
|
|
|
|
output.Write(" (this module)"); |
|
|
|
|
break; |
|
|
|
|
case HandleKind.ModuleReference: |
|
|
|
|
ModuleReference moduleReference = metadata.GetModuleReference((ModuleReferenceHandle)handle); |
|
|
|
|
output.Write(metadata.GetString(moduleReference.Name)); |
|
|
|
|
break; |
|
|
|
|
case HandleKind.AssemblyReference: |
|
|
|
|
var asmRef = new Decompiler.Metadata.AssemblyReference(module, (AssemblyReferenceHandle)handle); |
|
|
|
|
output.Write(asmRef.ToString()); |
|
|
|
|
break; |
|
|
|
|
case HandleKind.Parameter: |
|
|
|
|
var param = metadata.GetParameter((ParameterHandle)handle); |
|
|
|
|
output.Write(param.SequenceNumber + " - " + metadata.GetString(param.Name)); |
|
|
|
|
break; |
|
|
|
|
case HandleKind.EventDefinition: |
|
|
|
|
var @event = metadata.GetEventDefinition((EventDefinitionHandle)handle); |
|
|
|
|
output.Write(metadata.GetString(@event.Name)); |
|
|
|
|
break; |
|
|
|
|
case HandleKind.PropertyDefinition: |
|
|
|
|
var prop = metadata.GetPropertyDefinition((PropertyDefinitionHandle)handle); |
|
|
|
|
output.Write(metadata.GetString(prop.Name)); |
|
|
|
|
break; |
|
|
|
|
case HandleKind.AssemblyDefinition: |
|
|
|
|
var ad = metadata.GetAssemblyDefinition(); |
|
|
|
|
output.Write(metadata.GetString(ad.Name)); |
|
|
|
|
output.Write(" (this assembly)"); |
|
|
|
|
break; |
|
|
|
|
case HandleKind.AssemblyFile: |
|
|
|
|
var af = metadata.GetAssemblyFile((AssemblyFileHandle)handle); |
|
|
|
|
output.Write(metadata.GetString(af.Name)); |
|
|
|
|
break; |
|
|
|
|
case HandleKind.GenericParameter: |
|
|
|
|
var gp = metadata.GetGenericParameter((GenericParameterHandle)handle); |
|
|
|
|
output.Write(metadata.GetString(gp.Name)); |
|
|
|
|
break; |
|
|
|
|
case HandleKind.ManifestResource: |
|
|
|
|
var mfr = metadata.GetManifestResource((ManifestResourceHandle)handle); |
|
|
|
|
output.Write(metadata.GetString(mfr.Name)); |
|
|
|
|
break; |
|
|
|
|
case HandleKind.Document: |
|
|
|
|
var doc = metadata.GetDocument((DocumentHandle)handle); |
|
|
|
|
output.Write(metadata.GetString(doc.Name)); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
handle.WriteTo(module, output, context); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
tooltip = "(" + handle.Kind + ") " + output.ToString(); |
|
|
|
|
} |
|
|
|
|
return tooltip; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
internal abstract class DebugMetadataTableTreeNode : MetadataTableTreeNode |
|
|
|
|
|