提交 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 ...@@ -90,9 +90,8 @@ private async Task<DefinitionItem> GetDefinitionItemAsync(SymbolAndProjectId def
{ {
if (!_definitionToItem.TryGetValue(definition.Symbol, out var definitionItem)) if (!_definitionToItem.TryGetValue(definition.Symbol, out var definitionItem))
{ {
definitionItem = await definition.Symbol.ToDefinitionItemAsync( definitionItem = await definition.Symbol.ToClassifiedDefinitionItemAsync(
_solution, includeHiddenLocations: false, _solution, includeHiddenLocations: false, cancellationToken: _context.CancellationToken).ConfigureAwait(false);
cancellationToken: _context.CancellationToken).ConfigureAwait(false);
_definitionToItem[definition.Symbol] = definitionItem; _definitionToItem[definition.Symbol] = definitionItem;
} }
......
...@@ -39,9 +39,8 @@ internal abstract partial class AbstractFindUsagesService : IFindUsagesService ...@@ -39,9 +39,8 @@ internal abstract partial class AbstractFindUsagesService : IFindUsagesService
var project = tuple.Value.project; var project = tuple.Value.project;
foreach (var implementation in tuple.Value.implementations) foreach (var implementation in tuple.Value.implementations)
{ {
var definitionItem = await implementation.ToDefinitionItemAsync( var definitionItem = await implementation.ToClassifiedDefinitionItemAsync(
project.Solution, includeHiddenLocations: false, project.Solution, includeHiddenLocations: false, cancellationToken: cancellationToken).ConfigureAwait(false);
cancellationToken: cancellationToken).ConfigureAwait(false);
await context.OnDefinitionFoundAsync(definitionItem).ConfigureAwait(false); await context.OnDefinitionFoundAsync(definitionItem).ConfigureAwait(false);
} }
} }
......
...@@ -37,10 +37,35 @@ internal class DefaultDefinitionsAndReferencesFactory : IDefinitionsAndReference ...@@ -37,10 +37,35 @@ internal class DefaultDefinitionsAndReferencesFactory : IDefinitionsAndReference
internal static class DefinitionItemExtensions 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, this ISymbol definition,
Solution solution, Solution solution,
bool includeHiddenLocations, bool includeHiddenLocations,
bool includeClassifiedSpans,
CancellationToken cancellationToken) CancellationToken cancellationToken)
{ {
// Ensure we're working with the original definition for the symbol. I.e. When we're // Ensure we're working with the original definition for the symbol. I.e. When we're
...@@ -86,8 +111,10 @@ internal static class DefinitionItemExtensions ...@@ -86,8 +111,10 @@ internal static class DefinitionItemExtensions
var document = solution.GetDocument(location.SourceTree); var document = solution.GetDocument(location.SourceTree);
if (document != null) if (document != null)
{ {
var documentLocation = await ClassifiedSpansAndHighlightSpan.GetClassifiedDocumentSpanAsync( var documentLocation = !includeClassifiedSpans
document, location.SourceSpan, cancellationToken).ConfigureAwait(false); ? new DocumentSpan(document, location.SourceSpan)
: await ClassifiedSpansAndHighlightSpan.GetClassifiedDocumentSpanAsync(
document, location.SourceSpan, cancellationToken).ConfigureAwait(false);
sourceLocations.Add(documentLocation); sourceLocations.Add(documentLocation);
} }
......
...@@ -61,7 +61,7 @@ internal static class GoToDefinitionHelpers ...@@ -61,7 +61,7 @@ internal static class GoToDefinitionHelpers
} }
var definitions = ArrayBuilder<DefinitionItem>.GetInstance(); var definitions = ArrayBuilder<DefinitionItem>.GetInstance();
var definitionItem = symbol.ToDefinitionItemAsync( var definitionItem = symbol.ToClassifiedDefinitionItemAsync(
solution, includeHiddenLocations: true, cancellationToken: cancellationToken).WaitAndGetResult(cancellationToken); solution, includeHiddenLocations: true, cancellationToken: cancellationToken).WaitAndGetResult(cancellationToken);
if (thirdPartyNavigationAllowed) if (thirdPartyNavigationAllowed)
......
...@@ -60,8 +60,7 @@ private PeekableItemFactory(IMetadataAsSourceFileService metadataAsSourceFileSer ...@@ -60,8 +60,7 @@ private PeekableItemFactory(IMetadataAsSourceFileService metadataAsSourceFileSer
} }
var symbolNavigationService = solution.Workspace.Services.GetService<ISymbolNavigationService>(); var symbolNavigationService = solution.Workspace.Services.GetService<ISymbolNavigationService>();
var definitionItem = await symbol.ToDefinitionItemAsync( var definitionItem = symbol.ToNonClassifiedDefinitionItem(solution, includeHiddenLocations: true);
solution, includeHiddenLocations: true, cancellationToken: cancellationToken).ConfigureAwait(false);
if (symbolNavigationService.WouldNavigateToSymbol( if (symbolNavigationService.WouldNavigateToSymbol(
definitionItem, solution, cancellationToken, definitionItem, solution, cancellationToken,
......
...@@ -158,9 +158,8 @@ public bool TrySymbolNavigationNotify(ISymbol symbol, Solution solution, Cancell ...@@ -158,9 +158,8 @@ public bool TrySymbolNavigationNotify(ISymbol symbol, Solution solution, Cancell
ISymbol symbol, Solution solution, CancellationToken cancellationToken) ISymbol symbol, Solution solution, CancellationToken cancellationToken)
{ {
AssertIsForeground(); 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); definitionItem.Properties.TryGetValue(DefinitionItem.RQNameKey1, out var rqName);
if (!TryGetNavigationAPIRequiredArguments( if (!TryGetNavigationAPIRequiredArguments(
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册