提交 b4420494 编写于 作者: C CyrusNajmabadi

Allow callers to indicate if they want classified text produced or not for their definition items.

上级 b5386dea
......@@ -90,9 +90,8 @@ private async Task<DefinitionItem> GetDefinitionItemAsync(SymbolAndProjectId def
{
if (!_definitionToItem.TryGetValue(definition.Symbol, out var definitionItem))
{
definitionItem = await definition.Symbol.ToDefinitionItemAsync(
_solution, includeHiddenLocations: false,
cancellationToken: _context.CancellationToken).ConfigureAwait(false);
definitionItem = await definition.Symbol.ToClassifiedDefinitionItemAsync(
_solution, includeHiddenLocations: false, cancellationToken: _context.CancellationToken).ConfigureAwait(false);
_definitionToItem[definition.Symbol] = definitionItem;
}
......
......@@ -39,9 +39,8 @@ internal abstract partial class AbstractFindUsagesService : IFindUsagesService
var project = tuple.Value.project;
foreach (var implementation in tuple.Value.implementations)
{
var definitionItem = await implementation.ToDefinitionItemAsync(
project.Solution, includeHiddenLocations: false,
cancellationToken: cancellationToken).ConfigureAwait(false);
var definitionItem = await implementation.ToClassifiedDefinitionItemAsync(
project.Solution, includeHiddenLocations: false, cancellationToken: cancellationToken).ConfigureAwait(false);
await context.OnDefinitionFoundAsync(definitionItem).ConfigureAwait(false);
}
}
......
......@@ -37,10 +37,35 @@ internal class DefaultDefinitionsAndReferencesFactory : IDefinitionsAndReference
internal static class DefinitionItemExtensions
{
public static async Task<DefinitionItem> ToDefinitionItemAsync(
public static DefinitionItem ToNonClassifiedDefinitionItem(
this ISymbol definition,
Solution solution,
bool includeHiddenLocations)
{
// Because we're passing in 'false' for 'includeClassifiedSpans', this won't ever have
// to actually do async work. This is because the only asynchrony is when we are trying
// to compute the classified spans for the locations of the definition. So it's totally
// fine to pass in CancellationToken.None and block on the result.
return ToDefinitionItemAsync(definition, solution, includeHiddenLocations,
includeClassifiedSpans: false, cancellationToken: CancellationToken.None).Result;
}
public static Task<DefinitionItem> ToClassifiedDefinitionItemAsync(
this ISymbol definition,
Solution solution,
bool includeHiddenLocations,
CancellationToken cancellationToken)
{
return ToDefinitionItemAsync(definition, solution,
includeHiddenLocations, includeClassifiedSpans: true, cancellationToken: cancellationToken);
}
private static async Task<DefinitionItem> ToDefinitionItemAsync(
this ISymbol definition,
Solution solution,
bool includeHiddenLocations,
bool includeClassifiedSpans,
CancellationToken cancellationToken)
{
// Ensure we're working with the original definition for the symbol. I.e. When we're
......@@ -86,7 +111,9 @@ internal static class DefinitionItemExtensions
var document = solution.GetDocument(location.SourceTree);
if (document != null)
{
var documentLocation = await ClassifiedSpansAndHighlightSpan.GetClassifiedDocumentSpanAsync(
var documentLocation = !includeClassifiedSpans
? new DocumentSpan(document, location.SourceSpan)
: await ClassifiedSpansAndHighlightSpan.GetClassifiedDocumentSpanAsync(
document, location.SourceSpan, cancellationToken).ConfigureAwait(false);
sourceLocations.Add(documentLocation);
......
......@@ -61,7 +61,7 @@ internal static class GoToDefinitionHelpers
}
var definitions = ArrayBuilder<DefinitionItem>.GetInstance();
var definitionItem = symbol.ToDefinitionItemAsync(
var definitionItem = symbol.ToClassifiedDefinitionItemAsync(
solution, includeHiddenLocations: true, cancellationToken: cancellationToken).WaitAndGetResult(cancellationToken);
if (thirdPartyNavigationAllowed)
......
......@@ -60,8 +60,7 @@ private PeekableItemFactory(IMetadataAsSourceFileService metadataAsSourceFileSer
}
var symbolNavigationService = solution.Workspace.Services.GetService<ISymbolNavigationService>();
var definitionItem = await symbol.ToDefinitionItemAsync(
solution, includeHiddenLocations: true, cancellationToken: cancellationToken).ConfigureAwait(false);
var definitionItem = symbol.ToNonClassifiedDefinitionItem(solution, includeHiddenLocations: true);
if (symbolNavigationService.WouldNavigateToSymbol(
definitionItem, solution, cancellationToken,
......
......@@ -158,9 +158,8 @@ public bool TrySymbolNavigationNotify(ISymbol symbol, Solution solution, Cancell
ISymbol symbol, Solution solution, CancellationToken cancellationToken)
{
AssertIsForeground();
var definitionItem = symbol.ToDefinitionItemAsync(
solution, includeHiddenLocations: true, cancellationToken: cancellationToken).WaitAndGetResult(cancellationToken);
var definitionItem = symbol.ToNonClassifiedDefinitionItem(solution, includeHiddenLocations: true);
definitionItem.Properties.TryGetValue(DefinitionItem.RQNameKey1, out var rqName);
if (!TryGetNavigationAPIRequiredArguments(
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册