Browse Source

#1803: Fix InvalidCastException when executing "Decompile to new tab" on analyzer nodes.

pull/1820/head
Siegfried Pammer 6 years ago
parent
commit
703cd3345b
  1. 14
      ILSpy/Commands/DecompileInNewViewCommand.cs

14
ILSpy/Commands/DecompileInNewViewCommand.cs

@ -42,18 +42,26 @@ namespace ICSharpCode.ILSpy.Commands
public void Execute(TextViewContext context) public void Execute(TextViewContext context)
{ {
if (context.SelectedTreeNodes != null) { if (context.SelectedTreeNodes != null) {
var nodes = context.SelectedTreeNodes.Cast<ILSpyTreeNode>().ToArray(); var nodes = context.SelectedTreeNodes.OfType<IMemberTreeNode>().Select(FindTreeNode).ToArray();
DecompileNodes(nodes); DecompileNodes(nodes);
} else if (context.Reference?.Reference is IEntity entity) { } else if (context.Reference?.Reference is IEntity entity) {
var node = MainWindow.Instance.FindTreeNode(entity); if (MainWindow.Instance.FindTreeNode(entity) is ILSpyTreeNode node) {
if (node != null) {
DecompileNodes(node); DecompileNodes(node);
} }
} }
ILSpyTreeNode FindTreeNode(IMemberTreeNode node)
{
if (node is ILSpyTreeNode ilspyNode)
return ilspyNode;
return MainWindow.Instance.FindTreeNode(node.Member);
}
} }
private static void DecompileNodes(params ILSpyTreeNode[] nodes) private static void DecompileNodes(params ILSpyTreeNode[] nodes)
{ {
if (nodes.Length == 0)
return;
var title = string.Join(", ", nodes.Select(x => x.ToString())); var title = string.Join(", ", nodes.Select(x => x.ToString()));
DockWorkspace.Instance.Documents.Add(new ViewModels.DecompiledDocumentModel(title, title) { Language = MainWindow.Instance.CurrentLanguage, LanguageVersion = MainWindow.Instance.CurrentLanguageVersion }); DockWorkspace.Instance.Documents.Add(new ViewModels.DecompiledDocumentModel(title, title) { Language = MainWindow.Instance.CurrentLanguage, LanguageVersion = MainWindow.Instance.CurrentLanguageVersion });
DockWorkspace.Instance.ActiveDocument = DockWorkspace.Instance.Documents.Last(); DockWorkspace.Instance.ActiveDocument = DockWorkspace.Instance.Documents.Last();

Loading…
Cancel
Save