From 7e818a3ba1253f963e3138518a9f422a27dc3841 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Artur=20Zgodzi=C5=84ski?= Date: Fri, 8 Apr 2011 08:37:19 +0200 Subject: [PATCH] Fixed: some analyzers throw an exception when a definition of any assembly is not available. --- ILSpy/TreeNodes/Analyzer/AnalyzedFieldAccessNode.cs | 3 ++- ILSpy/TreeNodes/Analyzer/AnalyzedMethodUsedByTreeNode.cs | 3 ++- ILSpy/TreeNodes/Analyzer/AnalyzedPropertyOverridesTreeNode.cs | 3 ++- ILSpy/TreeNodes/Analyzer/AnalyzerMethodOverridesTreeNode.cs | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ILSpy/TreeNodes/Analyzer/AnalyzedFieldAccessNode.cs b/ILSpy/TreeNodes/Analyzer/AnalyzedFieldAccessNode.cs index cfad11418..200f8e693 100644 --- a/ILSpy/TreeNodes/Analyzer/AnalyzedFieldAccessNode.cs +++ b/ILSpy/TreeNodes/Analyzer/AnalyzedFieldAccessNode.cs @@ -57,8 +57,9 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer return FindReferences(MainWindow.Instance.AssemblyList.GetAssemblies(), ct); } - IEnumerable FindReferences(LoadedAssembly[] assemblies, CancellationToken ct) + IEnumerable FindReferences(IEnumerable assemblies, CancellationToken ct) { + assemblies = assemblies.Where(asm => asm.AssemblyDefinition != null); // use parallelism only on the assembly level (avoid locks within Cecil) return assemblies.AsParallel().WithCancellation(ct).SelectMany((LoadedAssembly asm) => FindReferences(asm, ct)); } diff --git a/ILSpy/TreeNodes/Analyzer/AnalyzedMethodUsedByTreeNode.cs b/ILSpy/TreeNodes/Analyzer/AnalyzedMethodUsedByTreeNode.cs index 28bdce99f..4c7900c12 100644 --- a/ILSpy/TreeNodes/Analyzer/AnalyzedMethodUsedByTreeNode.cs +++ b/ILSpy/TreeNodes/Analyzer/AnalyzedMethodUsedByTreeNode.cs @@ -70,8 +70,9 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer return FindReferences(MainWindow.Instance.AssemblyList.GetAssemblies(), ct); } - IEnumerable FindReferences(LoadedAssembly[] assemblies, CancellationToken ct) + IEnumerable FindReferences(IEnumerable assemblies, CancellationToken ct) { + assemblies = assemblies.Where(asm => asm.AssemblyDefinition != null); // use parallelism only on the assembly level (avoid locks within Cecil) return assemblies.AsParallel().WithCancellation(ct).SelectMany((LoadedAssembly asm) => FindReferences(asm, ct)); } diff --git a/ILSpy/TreeNodes/Analyzer/AnalyzedPropertyOverridesTreeNode.cs b/ILSpy/TreeNodes/Analyzer/AnalyzedPropertyOverridesTreeNode.cs index b3e21b6e1..cb7a810a8 100644 --- a/ILSpy/TreeNodes/Analyzer/AnalyzedPropertyOverridesTreeNode.cs +++ b/ILSpy/TreeNodes/Analyzer/AnalyzedPropertyOverridesTreeNode.cs @@ -54,8 +54,9 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer return FindReferences(MainWindow.Instance.AssemblyList.GetAssemblies(), ct); } - IEnumerable FindReferences(LoadedAssembly[] assemblies, CancellationToken ct) + IEnumerable FindReferences(IEnumerable assemblies, CancellationToken ct) { + assemblies = assemblies.Where(asm => asm.AssemblyDefinition != null); // use parallelism only on the assembly level (avoid locks within Cecil) return assemblies.AsParallel().WithCancellation(ct).SelectMany((LoadedAssembly asm) => FindReferences(asm, ct)); } diff --git a/ILSpy/TreeNodes/Analyzer/AnalyzerMethodOverridesTreeNode.cs b/ILSpy/TreeNodes/Analyzer/AnalyzerMethodOverridesTreeNode.cs index 69151630b..753f02b9e 100644 --- a/ILSpy/TreeNodes/Analyzer/AnalyzerMethodOverridesTreeNode.cs +++ b/ILSpy/TreeNodes/Analyzer/AnalyzerMethodOverridesTreeNode.cs @@ -58,8 +58,9 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer return FindReferences(MainWindow.Instance.AssemblyList.GetAssemblies(), ct); } - IEnumerable FindReferences(LoadedAssembly[] assemblies, CancellationToken ct) + IEnumerable FindReferences(IEnumerable assemblies, CancellationToken ct) { + assemblies = assemblies.Where(asm => asm.AssemblyDefinition != null); // use parallelism only on the assembly level (avoid locks within Cecil) return assemblies.AsParallel().WithCancellation(ct).SelectMany((LoadedAssembly asm) => FindReferences(asm, ct)); }