Browse Source

Fix #1014: fix assembly load errors causing ILSpy to crash

pull/1033/merge
Daniel Grunwald 8 years ago
parent
commit
3e6d202665
  1. 4
      ILSpy/MainWindow.xaml.cs
  2. 2
      ILSpy/SearchPane.cs
  3. 2
      ILSpy/TreeNodes/Analyzer/AnalyzerEntityTreeNode.cs
  4. 2
      ILSpy/TreeNodes/AssemblyListTreeNode.cs
  5. 2
      ILSpy/TreeNodes/AssemblyReferenceTreeNode.cs
  6. 7
      ILSpy/TreeNodes/AssemblyTreeNode.cs
  7. 2
      ILSpy/TreeNodes/DerivedTypesTreeNode.cs
  8. 2
      TestPlugin/ContextMenuCommand.cs

4
ILSpy/MainWindow.xaml.cs

@ -273,7 +273,7 @@ namespace ICSharpCode.ILSpy @@ -273,7 +273,7 @@ namespace ICSharpCode.ILSpy
}
} else {
foreach (LoadedAssembly asm in commandLineLoadedAssemblies) {
ModuleDefinition def = asm.GetModuleDefinitionAsync().Result;
ModuleDefinition def = asm.GetModuleDefinitionOrNull();
if (def != null) {
MemberReference mr = XmlDocKeyProvider.FindMemberByKey(def, args.NavigateTo);
if (mr != null) {
@ -292,7 +292,7 @@ namespace ICSharpCode.ILSpy @@ -292,7 +292,7 @@ namespace ICSharpCode.ILSpy
} else if (commandLineLoadedAssemblies.Count == 1) {
// NavigateTo == null and an assembly was given on the command-line:
// Select the newly loaded assembly
JumpToReference(commandLineLoadedAssemblies[0].GetModuleDefinitionAsync().Result);
JumpToReference(commandLineLoadedAssemblies[0].GetModuleDefinitionOrNull());
}
if (args.Search != null)
{

2
ILSpy/SearchPane.cs

@ -216,7 +216,7 @@ namespace ICSharpCode.ILSpy @@ -216,7 +216,7 @@ namespace ICSharpCode.ILSpy
try {
var searcher = GetSearchStrategy(searchMode, searchTerm);
foreach (var loadedAssembly in assemblies) {
ModuleDefinition module = loadedAssembly.GetModuleDefinitionAsync().Result;
ModuleDefinition module = loadedAssembly.GetModuleDefinitionOrNull();
if (module == null)
continue;
CancellationToken cancellationToken = cts.Token;

2
ILSpy/TreeNodes/Analyzer/AnalyzerEntityTreeNode.cs

@ -38,7 +38,7 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer @@ -38,7 +38,7 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
public override bool HandleAssemblyListChanged(ICollection<LoadedAssembly> removedAssemblies, ICollection<LoadedAssembly> addedAssemblies)
{
foreach (LoadedAssembly asm in removedAssemblies) {
if (this.Member.Module == asm.GetModuleDefinitionAsync().Result)
if (this.Member.Module == asm.GetModuleDefinitionOrNull())
return false; // remove this node
}
this.Children.RemoveAll(

2
ILSpy/TreeNodes/AssemblyListTreeNode.cs

@ -185,7 +185,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -185,7 +185,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
return null;
App.Current.Dispatcher.VerifyAccess();
foreach (AssemblyTreeNode node in this.Children) {
if (node.LoadedAssembly.IsLoaded && node.LoadedAssembly.GetModuleDefinitionAsync().Result == module)
if (node.LoadedAssembly.IsLoaded && node.LoadedAssembly.GetModuleDefinitionOrNull() == module)
return node;
}
return null;

2
ILSpy/TreeNodes/AssemblyReferenceTreeNode.cs

@ -77,7 +77,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -77,7 +77,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
if (assemblyListNode != null) {
var refNode = assemblyListNode.FindAssemblyNode(parentAssembly.LoadedAssembly.LookupReferencedAssembly(r));
if (refNode != null) {
ModuleDefinition module = refNode.LoadedAssembly.GetModuleDefinitionAsync().Result;
ModuleDefinition module = refNode.LoadedAssembly.GetModuleDefinitionOrNull();
if (module != null) {
foreach (var childRef in module.AssemblyReferences)
this.Children.Add(new AssemblyReferenceTreeNode(childRef, refNode));

7
ILSpy/TreeNodes/AssemblyTreeNode.cs

@ -145,7 +145,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -145,7 +145,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
protected override void LoadChildren()
{
ModuleDefinition moduleDefinition = assembly.GetModuleDefinitionAsync().Result;
ModuleDefinition moduleDefinition = assembly.GetModuleDefinitionOrNull();
if (moduleDefinition == null) {
// if we crashed on loading, then we don't have any children
return;
@ -396,8 +396,9 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -396,8 +396,9 @@ namespace ICSharpCode.ILSpy.TreeNodes
return;
foreach (var node in context.SelectedTreeNodes) {
var la = ((AssemblyTreeNode)node).LoadedAssembly;
if (!la.HasLoadError) {
foreach (var assyRef in la.GetModuleDefinitionAsync().Result.AssemblyReferences) {
var module = la.GetModuleDefinitionOrNull();
if (module != null) {
foreach (var assyRef in module.AssemblyReferences) {
la.LookupReferencedAssembly(assyRef);
}
}

2
ILSpy/TreeNodes/DerivedTypesTreeNode.cs

@ -60,7 +60,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -60,7 +60,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
IEnumerable<ILSpyTreeNode> FetchChildren(CancellationToken cancellationToken)
{
// FetchChildren() runs on the main thread; but the enumerator will be consumed on a background thread
var assemblies = list.GetAssemblies().Select(node => node.GetModuleDefinitionAsync().Result).Where(asm => asm != null).ToArray();
var assemblies = list.GetAssemblies().Select(node => node.GetModuleDefinitionOrNull()).Where(asm => asm != null).ToArray();
return FindDerivedTypes(type, assemblies, cancellationToken);
}

2
TestPlugin/ContextMenuCommand.cs

@ -27,7 +27,7 @@ namespace TestPlugin @@ -27,7 +27,7 @@ namespace TestPlugin
if (context.SelectedTreeNodes == null)
return;
AssemblyTreeNode node = (AssemblyTreeNode)context.SelectedTreeNodes[0];
AssemblyDefinition asm = node.LoadedAssembly.GetAssemblyDefinitionAsync().Result;
AssemblyDefinition asm = node.LoadedAssembly.GetAssemblyDefinitionOrNull();
if (asm != null) {
SaveFileDialog dlg = new SaveFileDialog();
dlg.FileName = node.LoadedAssembly.FileName;

Loading…
Cancel
Save