From 3568b7b4efc68372ed6fe41fcff6960619994e26 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Fri, 1 May 2015 10:31:44 -0700 Subject: [PATCH] Ensure that cref completion uses Speculative SemanticModel. Fixes TFS #988380 --- .../CompletionProviders/CrefCompletionProvider.cs | 6 +++++- .../CompletionProviders/CrefCompletionProvider.vb | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Features/CSharp/Completion/CompletionProviders/CrefCompletionProvider.cs b/src/Features/CSharp/Completion/CompletionProviders/CrefCompletionProvider.cs index 8a65dbd464b..7f4886d223a 100644 --- a/src/Features/CSharp/Completion/CompletionProviders/CrefCompletionProvider.cs +++ b/src/Features/CSharp/Completion/CompletionProviders/CrefCompletionProvider.cs @@ -76,7 +76,11 @@ protected override async Task> GetItemsWorkerAsync(D } var result = SpecializedCollections.EmptyEnumerable(); - var semanticModel = await document.GetCSharpSemanticModelForNodeAsync(token.Parent, cancellationToken).ConfigureAwait(false); + + // To get a Speculative SemanticModel (which is much faster), we need to + // walk up to the node the DocumentationTrivia is attached to. + var parentNode = token.GetAncestor().ParentTrivia.Token.Parent; + var semanticModel = await document.GetCSharpSemanticModelForNodeAsync(parentNode, cancellationToken).ConfigureAwait(false); // cref ""|, ""|"", ""a|"" if (token.IsKind(SyntaxKind.DoubleQuoteToken, SyntaxKind.SingleQuoteToken) && token.Parent.IsKind(SyntaxKind.XmlCrefAttribute)) diff --git a/src/Features/VisualBasic/Completion/CompletionProviders/CrefCompletionProvider.vb b/src/Features/VisualBasic/Completion/CompletionProviders/CrefCompletionProvider.vb index fbded0e243e..6ae7f3969e5 100644 --- a/src/Features/VisualBasic/Completion/CompletionProviders/CrefCompletionProvider.vb +++ b/src/Features/VisualBasic/Completion/CompletionProviders/CrefCompletionProvider.vb @@ -59,7 +59,10 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.Providers Return Nothing End If - Dim semanticModel = Await document.GetVisualBasicSemanticModelForNodeAsync(touchingToken.Parent, cancellationToken).ConfigureAwait(False) + ' To get a Speculative SemanticModel (which is much faster), we need to + ' walk up to the node the DocumentationTrivia is attached to. + Dim parentNode = token.GetAncestor(Of DocumentationCommentTriviaSyntax)().ParentTrivia.Token.Parent + Dim semanticModel = Await document.GetVisualBasicSemanticModelForNodeAsync(parentNode, cancellationToken).ConfigureAwait(False) Dim workspace = document.Project.Solution.Workspace If IsXmlStringContext(touchingToken) OrElse -- GitLab