diff --git a/Directory.Packages.props b/Directory.Packages.props
index cc543f59b..0a153070f 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -46,6 +46,7 @@
+
diff --git a/ILSpy/Analyzers/AnalyzeCommand.cs b/ILSpy/Analyzers/AnalyzeCommand.cs
index 854aa565c..00e6b03db 100644
--- a/ILSpy/Analyzers/AnalyzeCommand.cs
+++ b/ILSpy/Analyzers/AnalyzeCommand.cs
@@ -16,21 +16,30 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
-using System;
using System.ComponentModel.Composition;
using System.Linq;
+using System.Windows;
-using ICSharpCode.Decompiler.Metadata;
using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.ILSpy.Properties;
using ICSharpCode.ILSpy.TreeNodes;
+using TomsToolbox.Composition;
+
namespace ICSharpCode.ILSpy.Analyzers
{
[ExportContextMenuEntry(Header = nameof(Resources.Analyze), Icon = "Images/Search", Category = nameof(Resources.Analyze), InputGestureText = "Ctrl+R", Order = 100)]
[PartCreationPolicy(CreationPolicy.Shared)]
internal sealed class AnalyzeCommand : SimpleCommand, IContextMenuEntry
{
+ private static readonly IExport analyzerTreeViewExport = App.ExportProvider.GetExports().Single();
+
+ private static AnalyzerTreeView AnalyzerTreeView {
+ get {
+ return Application.Current?.MainWindow?.IsLoaded != true ? null : analyzerTreeViewExport.Value;
+ }
+ }
+
public bool IsVisible(TextViewContext context)
{
if (context.TreeView is AnalyzerTreeView && context.SelectedTreeNodes != null && context.SelectedTreeNodes.All(n => n.Parent.IsRoot))
@@ -43,14 +52,12 @@ namespace ICSharpCode.ILSpy.Analyzers
public bool IsEnabled(TextViewContext context)
{
if (context.SelectedTreeNodes == null)
- return context.Reference != null && context.Reference.Reference is IEntity;
- foreach (IMemberTreeNode node in context.SelectedTreeNodes)
{
- if (!IsValidReference(node.Member))
- return false;
+ return context.Reference is { Reference: IEntity };
}
-
- return true;
+ return context.SelectedTreeNodes
+ .OfType()
+ .All(node => IsValidReference(node.Member));
}
bool IsValidReference(object reference)
@@ -60,52 +67,56 @@ namespace ICSharpCode.ILSpy.Analyzers
public void Execute(TextViewContext context)
{
- AnalyzerTreeView analyzerTreeView = MainWindow.Instance.AnalyzerTreeView;
- if (analyzerTreeView == null)
+ if (AnalyzerTreeView is null)
{
return;
}
if (context.SelectedTreeNodes != null)
{
- foreach (IMemberTreeNode node in context.SelectedTreeNodes)
+ foreach (var node in context.SelectedTreeNodes.OfType().ToArray())
{
- analyzerTreeView.Analyze(node.Member);
+ AnalyzerTreeView.Analyze(node.Member);
}
}
- else if (context.Reference != null && context.Reference.Reference is IEntity entity)
+ else if (context.Reference is { Reference: IEntity entity })
{
- analyzerTreeView.Analyze(entity);
+ AnalyzerTreeView.Analyze(entity);
}
}
public override bool CanExecute(object parameter)
{
- AnalyzerTreeView analyzerTreeView = MainWindow.Instance.AnalyzerTreeView;
- if (analyzerTreeView != null && analyzerTreeView.IsKeyboardFocusWithin)
+ if (AnalyzerTreeView is null)
{
- return analyzerTreeView.SelectedItems.OfType