| File: FindSymbols\FindReferences\Finders\IReferenceFinder.cs | Web Access |
| Project: src\roslyn\src\Workspaces\Core\Portable\Microsoft.CodeAnalysis.Workspaces.csproj (Microsoft.CodeAnalysis.Workspaces) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; namespace Microsoft.CodeAnalysis.FindSymbols.Finders; /// <summary> /// Extensibility interface to allow extending the IFindReferencesService service. Implementations /// must be thread-safe as the methods on this interface may be called on multiple threads /// simultaneously. Implementations should also respect the provided cancellation token and /// should try to cancel themselves quickly when requested. /// </summary> internal interface IReferenceFinder { /// <summary> /// Determines what, if any, global alias names could potentially map this symbol in this project. /// Note that this result is allowed to return global aliases that don't actually map to this symbol. /// For example, given symbol <c>A.X</c> and <c>global alias G = B.X</c>, <c>G</c> might be returned /// in a search for <c>A.X</c> because they both end in <c>X</c>. /// </summary> Task<ImmutableArray<string>> DetermineGlobalAliasesAsync( ISymbol symbol, Project project, CancellationToken cancellationToken); /// <summary> /// Called by the find references search engine when a new symbol definition is found. /// Implementations can then choose to request more symbols be searched for. For example, an /// implementation could choose for the find references search engine to cascade to /// constructors when searching for standard types. /// /// Implementations of this method must be thread-safe. /// </summary> ValueTask<ImmutableArray<ISymbol>> DetermineCascadedSymbolsAsync( ISymbol symbol, Solution solution, FindReferencesSearchOptions options, CancellationToken cancellationToken); /// <summary> /// Called by the find references search engine to determine which documents in the supplied /// project need to be searched for references. Only projects returned by /// DetermineProjectsToSearch will be passed to this method. /// /// Implementations should endeavor to keep the list of returned documents as small as /// possible to keep search time down to a minimum. Returning the entire list of documents /// in a project is not recommended (unless, of course, there is reasonable reason to /// believe there are references in every document). /// /// Implementations of this method must be thread-safe. /// </summary> Task DetermineDocumentsToSearchAsync<TData>( ISymbol symbol, HashSet<string>? globalAliases, Project project, IImmutableSet<Document>? documents, Action<Document, TData> processResult, TData processResultData, FindReferencesSearchOptions options, CancellationToken cancellationToken); /// <summary> /// Called by the find references search engine to determine the set of reference locations /// in the provided document. Only documents returned by DetermineDocumentsToSearch will be /// passed to this method. /// /// Implementations of this method must be thread-safe. /// </summary> void FindReferencesInDocument<TData>( ISymbol symbol, FindReferencesDocumentState state, Action<FinderLocation, TData> processResult, TData processResultData, FindReferencesSearchOptions options, CancellationToken cancellationToken); }