提交 6921c08b 编写于 作者: C CyrusNajmabadi

Remove synchronous work in Change-Signature.

上级 96568b8f
......@@ -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<ISymbol> 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;
......
......@@ -27,7 +27,7 @@ internal abstract class AbstractChangeSignatureService : ILanguageService
/// <summary>
/// Determines the symbol on which we are invoking ReorderParameters
/// </summary>
public abstract ISymbol GetInvocationSymbol(Document document, int position, bool restrictToDeclarations, CancellationToken cancellationToken);
public abstract Task<ISymbol> GetInvocationSymbolAsync(Document document, int position, bool restrictToDeclarations, CancellationToken cancellationToken);
/// <summary>
/// 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<ChangeSignatureAnalyzedContext> 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;
......
......@@ -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))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册