private static async Task <ImmutableArray <INavigateToSearchResult> > FindNavigableDeclaredSymbolInfosAsync( Project project, Document searchDocument, PatternMatcher nameMatcher, PatternMatcher containerMatcherOpt, ArrayBuilder <PatternMatch> nameMatches, ArrayBuilder <PatternMatch> containerMatches, CancellationToken cancellationToken) { var result = ArrayBuilder <INavigateToSearchResult> .GetInstance(); foreach (var document in project.Documents) { if (searchDocument != null && document != searchDocument) { continue; } cancellationToken.ThrowIfCancellationRequested(); var declarationInfo = await document.GetSyntaxTreeIndexAsync(cancellationToken).ConfigureAwait(false); foreach (var declaredSymbolInfo in declarationInfo.DeclaredSymbolInfos) { nameMatches.Clear(); containerMatches.Clear(); cancellationToken.ThrowIfCancellationRequested(); if (nameMatcher.AddMatches(declaredSymbolInfo.Name, nameMatches) && containerMatcherOpt?.AddMatches(declaredSymbolInfo.FullyQualifiedContainerName, containerMatches) != false) { result.Add(ConvertResult( declaredSymbolInfo, document, nameMatches, containerMatches)); } } } return(result.ToImmutableAndFree()); }
private static void AddResultIfMatch( Document document, DeclaredSymbolInfo declaredSymbolInfo, PatternMatcher nameMatcher, PatternMatcher containerMatcherOpt, ArrayBuilder <PatternMatch> nameMatches, ArrayBuilder <PatternMatch> containerMatches, ArrayBuilder <SearchResult> result, CancellationToken cancellationToken) { nameMatches.Clear(); containerMatches.Clear(); cancellationToken.ThrowIfCancellationRequested(); if (nameMatcher.AddMatches(declaredSymbolInfo.Name, nameMatches) && containerMatcherOpt?.AddMatches(declaredSymbolInfo.FullyQualifiedContainerName, containerMatches) != false) { result.Add(ConvertResult( declaredSymbolInfo, document, nameMatches, containerMatches)); } }