From 6921c08b514a417517e956f131e65f09db561efc Mon Sep 17 00:00:00 2001 From: CyrusNajmabadi Date: Tue, 21 Jun 2016 13:11:42 -0700 Subject: [PATCH] Remove synchronous work in Change-Signature. --- .../ChangeSignature/CSharpChangeSignatureService.cs | 5 +++-- .../ChangeSignature/AbstractChangeSignatureService.cs | 4 ++-- .../ChangeSignature/VisualBasicChangeSignatureService.vb | 8 ++++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Features/CSharp/Portable/ChangeSignature/CSharpChangeSignatureService.cs b/src/Features/CSharp/Portable/ChangeSignature/CSharpChangeSignatureService.cs index e78c8d5d477..a2c83ce0983 100644 --- a/src/Features/CSharp/Portable/ChangeSignature/CSharpChangeSignatureService.cs +++ b/src/Features/CSharp/Portable/ChangeSignature/CSharpChangeSignatureService.cs @@ -23,9 +23,10 @@ namespace Microsoft.CodeAnalysis.CSharp.ChangeSignature [ExportLanguageService(typeof(AbstractChangeSignatureService), LanguageNames.CSharp), Shared] internal sealed class CSharpChangeSignatureService : AbstractChangeSignatureService { - public override ISymbol GetInvocationSymbol(Document document, int position, bool restrictToDeclarations, CancellationToken cancellationToken) + public override async Task GetInvocationSymbolAsync( + Document document, int position, bool restrictToDeclarations, CancellationToken cancellationToken) { - var tree = document.GetSyntaxTreeAsync(cancellationToken).WaitAndGetResult(cancellationToken); + var tree = await document.GetSyntaxTreeAsync(cancellationToken).ConfigureAwait(false); var token = tree.GetRoot(cancellationToken).FindToken(position != tree.Length ? position : Math.Max(0, position - 1)); var ancestorDeclarationKinds = restrictToDeclarations ? _invokableAncestorKinds.Add(SyntaxKind.Block) : _invokableAncestorKinds; diff --git a/src/Features/Core/Portable/ChangeSignature/AbstractChangeSignatureService.cs b/src/Features/Core/Portable/ChangeSignature/AbstractChangeSignatureService.cs index bdea3190043..890ba210c08 100644 --- a/src/Features/Core/Portable/ChangeSignature/AbstractChangeSignatureService.cs +++ b/src/Features/Core/Portable/ChangeSignature/AbstractChangeSignatureService.cs @@ -27,7 +27,7 @@ internal abstract class AbstractChangeSignatureService : ILanguageService /// /// Determines the symbol on which we are invoking ReorderParameters /// - public abstract ISymbol GetInvocationSymbol(Document document, int position, bool restrictToDeclarations, CancellationToken cancellationToken); + public abstract Task GetInvocationSymbolAsync(Document document, int position, bool restrictToDeclarations, CancellationToken cancellationToken); /// /// Given a SyntaxNode for which we want to reorder parameters/arguments, find the @@ -85,7 +85,7 @@ internal ChangeSignatureResult ChangeSignature(Document document, int position, private async Task GetContextAsync(Document document, int position, bool restrictToDeclarations, CancellationToken cancellationToken) { - var symbol = GetInvocationSymbol(document, position, restrictToDeclarations, cancellationToken); + var symbol = await GetInvocationSymbolAsync(document, position, restrictToDeclarations, cancellationToken).ConfigureAwait(false); // Cross-lang symbols will show as metadata, so map it to source if possible. symbol = await SymbolFinder.FindSourceDefinitionAsync(symbol, document.Project.Solution, cancellationToken).ConfigureAwait(false) ?? symbol; diff --git a/src/Features/VisualBasic/Portable/ChangeSignature/VisualBasicChangeSignatureService.vb b/src/Features/VisualBasic/Portable/ChangeSignature/VisualBasicChangeSignatureService.vb index facb8e223bf..6081b4f707c 100644 --- a/src/Features/VisualBasic/Portable/ChangeSignature/VisualBasicChangeSignatureService.vb +++ b/src/Features/VisualBasic/Portable/ChangeSignature/VisualBasicChangeSignatureService.vb @@ -17,8 +17,12 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ChangeSignature Friend Class VisualBasicChangeSignatureService Inherits AbstractChangeSignatureService - Public Overrides Function GetInvocationSymbol(document As Document, position As Integer, restrictToDeclarations As Boolean, cancellationToken As CancellationToken) As ISymbol - Dim tree = document.GetSyntaxTreeAsync(cancellationToken).WaitAndGetResult(cancellationToken) + Public Overrides Async Function GetInvocationSymbolAsync( + document As Document, + position As Integer, + restrictToDeclarations As Boolean, + cancellationToken As CancellationToken) As Task(Of ISymbol) + Dim tree = Await document.GetSyntaxTreeAsync(cancellationToken).ConfigureAwait(False) Dim token = tree.GetRoot(cancellationToken).FindToken(If(position <> tree.Length, position, Math.Max(0, position - 1))) Dim matchingNode = token.Parent.AncestorsAndSelf().FirstOrDefault(Function(n) _invokableAncestorKinds.Contains(n.Kind)) -- GitLab