diff options
author | therzok <marius.ungureanu@xamarin.com> | 2019-04-26 04:53:51 +0300 |
---|---|---|
committer | therzok <marius.ungureanu@xamarin.com> | 2019-04-26 04:53:51 +0300 |
commit | 4fdf00ede5e3f1e1ccfdd50c5018c857dd1bd02d (patch) | |
tree | c946c62d38cac261b30cb6225948d28953f6f187 /main/src/addins/CSharpBinding | |
parent | 026d56961d838e01164f46f239e292829ed29e8d (diff) |
[Refactoring] Sanitize usage to only try AnalysisDocument code when doc.Editor is present
Should fix a few NREs in command updates
Diffstat (limited to 'main/src/addins/CSharpBinding')
8 files changed, 22 insertions, 20 deletions
diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Navigation/FindBaseSymbolsHandler.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Navigation/FindBaseSymbolsHandler.cs index 3e1ae33f2d..2b34ab179c 100644 --- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Navigation/FindBaseSymbolsHandler.cs +++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Navigation/FindBaseSymbolsHandler.cs @@ -67,17 +67,17 @@ namespace MonoDevelop.CSharp.Navigation }); } - internal static async Task<ISymbol> GetSymbolAtCaret (Ide.Gui.Document doc) + internal static async Task<ISymbol> GetSymbolAtCaret (Ide.Gui.Document doc, CancellationToken cancelToken = default) { - if (doc == null) + if (doc == null || doc.Editor == null) return null; - var info = await RefactoringSymbolInfo.GetSymbolInfoAsync (doc.DocumentContext, doc.Editor); + var info = await RefactoringSymbolInfo.GetSymbolInfoAsync (doc.DocumentContext, doc.Editor, cancelToken); return info.Symbol ?? info.DeclaredSymbol; } - protected override async void Update (CommandInfo info) + protected override async Task UpdateAsync (CommandInfo info, CancellationToken cancelToken) { - var sym = await GetSymbolAtCaret (IdeApp.Workbench.ActiveDocument); + var sym = await GetSymbolAtCaret (IdeApp.Workbench.ActiveDocument, cancelToken); info.Enabled = sym != null; info.Bypass = !info.Enabled; } diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Navigation/FindDerivedSymbolsHandler.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Navigation/FindDerivedSymbolsHandler.cs index 02372a6a91..044d1b2c39 100644 --- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Navigation/FindDerivedSymbolsHandler.cs +++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Navigation/FindDerivedSymbolsHandler.cs @@ -113,9 +113,9 @@ namespace MonoDevelop.CSharp.Refactoring return result; } - protected override async void Update (CommandInfo info) + protected override async Task UpdateAsync (CommandInfo info, CancellationToken cancelToken) { - var sym = await FindBaseSymbolsHandler.GetSymbolAtCaret (IdeApp.Workbench.ActiveDocument); + var sym = await FindBaseSymbolsHandler.GetSymbolAtCaret (IdeApp.Workbench.ActiveDocument, cancelToken); info.Enabled = sym != null; info.Bypass = !info.Enabled; } diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Navigation/FindExtensionMethodsHandler.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Navigation/FindExtensionMethodsHandler.cs index 1833f7f38f..21795bd5e6 100644 --- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Navigation/FindExtensionMethodsHandler.cs +++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Navigation/FindExtensionMethodsHandler.cs @@ -34,14 +34,15 @@ using Microsoft.CodeAnalysis.Shared.Extensions; using MonoDevelop.Components.Commands; using MonoDevelop.Refactoring; using ICSharpCode.NRefactory6.CSharp; +using System.Threading.Tasks; namespace MonoDevelop.CSharp.Navigation { class FindExtensionMethodsHandler : CommandHandler { - protected override async void Update (CommandInfo info) + protected override async Task UpdateAsync (CommandInfo info, CancellationToken cancelToken) { - var sym = await GetNamedTypeAtCaret (IdeApp.Workbench.ActiveDocument); + var sym = await GetNamedTypeAtCaret (IdeApp.Workbench.ActiveDocument, cancelToken); info.Enabled = sym != null && sym.IsKind (SymbolKind.NamedType); info.Bypass = !info.Enabled; } @@ -68,11 +69,11 @@ namespace MonoDevelop.CSharp.Navigation } } - internal static async System.Threading.Tasks.Task<INamedTypeSymbol> GetNamedTypeAtCaret (Ide.Gui.Document doc) + internal static async System.Threading.Tasks.Task<INamedTypeSymbol> GetNamedTypeAtCaret (Ide.Gui.Document doc, CancellationToken cancellationToken = default) { - if (doc == null) + if (doc == null || doc.Editor == null) return null;
- var info = await RefactoringSymbolInfo.GetSymbolInfoAsync (doc.DocumentContext, doc.Editor); + var info = await RefactoringSymbolInfo.GetSymbolInfoAsync (doc.DocumentContext, doc.Editor, cancellationToken); var sym = info.Symbol ?? info.DeclaredSymbol; return sym as INamedTypeSymbol; } diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Navigation/FindMemberOverloadsHandler.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Navigation/FindMemberOverloadsHandler.cs index dd8c9c88b6..398ecfa30d 100644 --- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Navigation/FindMemberOverloadsHandler.cs +++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Navigation/FindMemberOverloadsHandler.cs @@ -26,6 +26,7 @@ using System.Linq; using System.Threading; +using System.Threading.Tasks; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp.Extensions; using Microsoft.CodeAnalysis.Shared.Extensions; @@ -84,14 +85,14 @@ namespace MonoDevelop.CSharp.Navigation } } - protected override async void Update (CommandInfo info) + protected override async Task UpdateAsync (CommandInfo info, CancellationToken cancelToken) { var doc = IdeApp.Workbench.ActiveDocument; - if (doc == null) { + if (doc == null || doc.Editor == null) { info.Enabled = false; return; } - var symInfo = await RefactoringSymbolInfo.GetSymbolInfoAsync (doc.DocumentContext, doc.Editor); + var symInfo = await RefactoringSymbolInfo.GetSymbolInfoAsync (doc.DocumentContext, doc.Editor, cancelToken); var sym = symInfo.Symbol ?? symInfo.DeclaredSymbol; info.Enabled = sym != null && (sym.IsKind (SymbolKind.Method) || sym.IsKind (SymbolKind.Property) && ((IPropertySymbol)sym).IsIndexer); info.Bypass = !info.Enabled; diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/ExtractMethodCommandHandler.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/ExtractMethodCommandHandler.cs index 3647fb04f4..cd7d219a74 100644 --- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/ExtractMethodCommandHandler.cs +++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/ExtractMethodCommandHandler.cs @@ -61,7 +61,7 @@ namespace MonoDevelop.CSharp.Refactoring protected override void Update (CommandInfo info) { var doc = IdeApp.Workbench.ActiveDocument; - info.Enabled = doc != null && doc.DocumentContext.AnalysisDocument != null; + info.Enabled = doc != null && doc.Editor != null && doc.DocumentContext.AnalysisDocument != null; } public async static Task Run (MonoDevelop.Ide.Gui.Document doc) diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/FindReferencesHandler.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/FindReferencesHandler.cs index f2695122c7..b8d31c0940 100644 --- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/FindReferencesHandler.cs +++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/FindReferencesHandler.cs @@ -204,7 +204,7 @@ namespace MonoDevelop.CSharp.Refactoring public void Update (CommandInfo info) { var doc = IdeApp.Workbench.ActiveDocument; - if (doc == null || doc.FileName == FilePath.Null || doc.DocumentContext.ParsedDocument == null) { + if (doc == null || doc.FileName == FilePath.Null || doc.Editor == null || doc.DocumentContext.ParsedDocument == null) { info.Enabled = false; return; } diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/GotoDeclarationHandler.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/GotoDeclarationHandler.cs index 60ce03fa9d..d80c74aaa0 100644 --- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/GotoDeclarationHandler.cs +++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/GotoDeclarationHandler.cs @@ -62,7 +62,7 @@ namespace MonoDevelop.CSharp.Refactoring protected override void Run (object data) { var doc = IdeApp.Workbench.ActiveDocument; - if (doc == null || doc.FileName == FilePath.Null) + if (doc == null || doc.FileName == FilePath.Null || doc.Editor == null) return; Run (doc); } diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/RefactoryCommands.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/RefactoryCommands.cs index 91301f0eb2..c4e41946bf 100644 --- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/RefactoryCommands.cs +++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring/RefactoryCommands.cs @@ -63,7 +63,7 @@ namespace MonoDevelop.CSharp.Refactoring protected bool TryGetDocument (out Document analysisDocument, out Ide.Gui.Document doc) { doc = IdeApp.Workbench.ActiveDocument; - if (doc == null || doc.FileName == null) { + if (doc == null || doc.FileName == null || doc.Editor == null) { analysisDocument = null; return false; } @@ -137,7 +137,7 @@ namespace MonoDevelop.CSharp.Refactoring var semanticModel = await analysisDocument.GetSemanticModelAsync (cancelToken); if (semanticModel == null) return; - var info = await RefactoringSymbolInfo.GetSymbolInfoAsync (doc.DocumentContext, doc.Editor); + var info = await RefactoringSymbolInfo.GetSymbolInfoAsync (doc.DocumentContext, doc.Editor, cancelToken); var ext = doc.GetContent<CodeActionEditorExtension> (); |