Browse Source

Fix #2770: Add a few additional null-checks in tooltip code.

pull/2774/head
Siegfried Pammer 3 years ago
parent
commit
8a93d8b6e1
  1. 16
      ILSpy/Languages/ILLanguage.cs
  2. 5
      ILSpy/TextView/DecompilerTextView.cs

16
ILSpy/Languages/ILLanguage.cs

@ -195,27 +195,33 @@ namespace ICSharpCode.ILSpy
{ {
var output = new AvalonEditTextOutput() { IgnoreNewLineAndIndent = true }; var output = new AvalonEditTextOutput() { IgnoreNewLineAndIndent = true };
var disasm = CreateDisassembler(output, new DecompilationOptions()); var disasm = CreateDisassembler(output, new DecompilationOptions());
PEFile module = entity.ParentModule?.PEFile;
if (module == null)
{
return null;
}
switch (entity.SymbolKind) switch (entity.SymbolKind)
{ {
case SymbolKind.TypeDefinition: case SymbolKind.TypeDefinition:
disasm.DisassembleTypeHeader(entity.ParentModule.PEFile, (TypeDefinitionHandle)entity.MetadataToken); disasm.DisassembleTypeHeader(module, (TypeDefinitionHandle)entity.MetadataToken);
break; break;
case SymbolKind.Field: case SymbolKind.Field:
disasm.DisassembleFieldHeader(entity.ParentModule.PEFile, (FieldDefinitionHandle)entity.MetadataToken); disasm.DisassembleFieldHeader(module, (FieldDefinitionHandle)entity.MetadataToken);
break; break;
case SymbolKind.Property: case SymbolKind.Property:
case SymbolKind.Indexer: case SymbolKind.Indexer:
disasm.DisassemblePropertyHeader(entity.ParentModule.PEFile, (PropertyDefinitionHandle)entity.MetadataToken); disasm.DisassemblePropertyHeader(module, (PropertyDefinitionHandle)entity.MetadataToken);
break; break;
case SymbolKind.Event: case SymbolKind.Event:
disasm.DisassembleEventHeader(entity.ParentModule.PEFile, (EventDefinitionHandle)entity.MetadataToken); disasm.DisassembleEventHeader(module, (EventDefinitionHandle)entity.MetadataToken);
break; break;
case SymbolKind.Method: case SymbolKind.Method:
case SymbolKind.Operator: case SymbolKind.Operator:
case SymbolKind.Constructor: case SymbolKind.Constructor:
case SymbolKind.Destructor: case SymbolKind.Destructor:
case SymbolKind.Accessor: case SymbolKind.Accessor:
disasm.DisassembleMethodHeader(entity.ParentModule.PEFile, (MethodDefinitionHandle)entity.MetadataToken); disasm.DisassembleMethodHeader(module, (MethodDefinitionHandle)entity.MetadataToken);
break; break;
default: default:
output.Write(GetDisplayName(entity, true, true, true)); output.Write(GetDisplayName(entity, true, true, true));

5
ILSpy/TextView/DecompilerTextView.cs

@ -441,6 +441,11 @@ namespace ICSharpCode.ILSpy.TextView
Language currentLanguage = MainWindow.Instance.CurrentLanguage; Language currentLanguage = MainWindow.Instance.CurrentLanguage;
DocumentationUIBuilder renderer = new DocumentationUIBuilder(new CSharpAmbience(), currentLanguage.SyntaxHighlighting); DocumentationUIBuilder renderer = new DocumentationUIBuilder(new CSharpAmbience(), currentLanguage.SyntaxHighlighting);
RichText richText = currentLanguage.GetRichTextTooltip(resolved); RichText richText = currentLanguage.GetRichTextTooltip(resolved);
if (richText == null)
{
return null;
}
renderer.AddSignatureBlock(richText.Text, richText.ToRichTextModel()); renderer.AddSignatureBlock(richText.Text, richText.ToRichTextModel());
try try
{ {

Loading…
Cancel
Save