提交 10c59ff0 编写于 作者: C CyrusNajmabadi

Reorganize FAR code slightly to make adding streaming-FAR support in easier.

上级 015d8d31
......@@ -14,7 +14,7 @@
namespace Microsoft.CodeAnalysis.Editor.Implementation.FindReferences
{
internal abstract class AbstractFindReferencesService : IFindReferencesService
internal abstract partial class AbstractFindReferencesService : IFindReferencesService
{
private readonly IEnumerable<IReferencedSymbolsPresenter> _referenceSymbolPresenters;
private readonly IEnumerable<INavigableItemsPresenter> _navigableItemPresenters;
......@@ -30,9 +30,10 @@ internal abstract class AbstractFindReferencesService : IFindReferencesService
_externalReferencesProviders = externalReferencesProviders;
}
private async Task<Tuple<IEnumerable<ReferencedSymbol>, Solution>> FindReferencedSymbolsAsync(Document document, int position, IWaitContext waitContext)
private async Task<Tuple<ISymbol, Solution>> GetRelevantSymbolAndSolutionAtPositionAsync(
Document document, int position, CancellationToken cancellationToken)
{
var cancellationToken = waitContext.CancellationToken;
cancellationToken.ThrowIfCancellationRequested();
var symbol = await SymbolFinder.FindSymbolAtPositionAsync(document, position, cancellationToken: cancellationToken).ConfigureAwait(false);
if (symbol != null)
......@@ -45,14 +46,7 @@ internal abstract class AbstractFindReferencesService : IFindReferencesService
var mapping = await mappingService.MapSymbolAsync(document, symbol, cancellationToken).ConfigureAwait(false);
if (mapping != null)
{
var displayName = mapping.Symbol.IsConstructor() ? mapping.Symbol.ContainingType.Name : mapping.Symbol.Name;
waitContext.Message = string.Format(EditorFeaturesResources.Finding_references_of_0, displayName);
var result = await SymbolFinder.FindReferencesAsync(mapping.Symbol, mapping.Solution, cancellationToken).ConfigureAwait(false);
var searchSolution = mapping.Solution;
return Tuple.Create(result, searchSolution);
return Tuple.Create(mapping.Symbol, mapping.Solution);
}
}
......@@ -75,6 +69,30 @@ private async Task AddExternalReferencesAsync(Document document, int position, A
}
}
private async Task<Tuple<IEnumerable<ReferencedSymbol>, Solution>> FindReferencedSymbolsAsync(
Document document, int position, IWaitContext waitContext)
{
var cancellationToken = waitContext.CancellationToken;
var symbolAndSolution = await GetRelevantSymbolAndSolutionAtPositionAsync(document, position, cancellationToken).ConfigureAwait(false);
if (symbolAndSolution == null)
{
return null;
}
var symbol = symbolAndSolution.Item1;
var solution = symbolAndSolution.Item2;
var displayName = symbol.IsConstructor() ? symbol.ContainingType.Name : symbol.Name;
waitContext.Message = string.Format(
EditorFeaturesResources.Finding_references_of_0, displayName);
var result = await SymbolFinder.FindReferencesAsync(symbol, solution, cancellationToken).ConfigureAwait(false);
return Tuple.Create(result, solution);
}
public bool TryFindReferences(Document document, int position, IWaitContext waitContext)
{
var cancellationToken = waitContext.CancellationToken;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册