From 10c59ff0150eb4410b56a5819ecc3b068b2b672c Mon Sep 17 00:00:00 2001 From: CyrusNajmabadi Date: Thu, 21 Jul 2016 02:23:50 -0700 Subject: [PATCH] Reorganize FAR code slightly to make adding streaming-FAR support in easier. --- .../AbstractFindReferencesService.cs | 40 ++++++++++++++----- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/src/EditorFeatures/Core/Implementation/FindReferences/AbstractFindReferencesService.cs b/src/EditorFeatures/Core/Implementation/FindReferences/AbstractFindReferencesService.cs index 90065cdd67a..77e22e22d60 100644 --- a/src/EditorFeatures/Core/Implementation/FindReferences/AbstractFindReferencesService.cs +++ b/src/EditorFeatures/Core/Implementation/FindReferences/AbstractFindReferencesService.cs @@ -14,7 +14,7 @@ namespace Microsoft.CodeAnalysis.Editor.Implementation.FindReferences { - internal abstract class AbstractFindReferencesService : IFindReferencesService + internal abstract partial class AbstractFindReferencesService : IFindReferencesService { private readonly IEnumerable _referenceSymbolPresenters; private readonly IEnumerable _navigableItemPresenters; @@ -30,9 +30,10 @@ internal abstract class AbstractFindReferencesService : IFindReferencesService _externalReferencesProviders = externalReferencesProviders; } - private async Task, Solution>> FindReferencedSymbolsAsync(Document document, int position, IWaitContext waitContext) + private async Task> 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, 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; -- GitLab