public async Task<SerializableNavigateToSearchResult[]> SearchProjectAsync(
             SerializableProjectId projectId, string searchPattern, byte[] solutionChecksum)
        {
            var solution = await RoslynServices.SolutionService.GetSolutionAsync(
                new Checksum(solutionChecksum), CancellationToken).ConfigureAwait(false);

            var project = solution.GetProject(projectId.Rehydrate());
            var result = await DefaultNavigateToEngineService.SearchProjectInCurrentProcessAsync(
                project, searchPattern, CancellationToken).ConfigureAwait(false);

            return Convert(result);
        }
        private async Task <ImmutableArray <INavigateToSearchResult> > SearchProjectInRemoteProcessAsync(
            RemoteHostClient client, Project project, string searchPattern, CancellationToken cancellationToken)
        {
            var solution = project.Solution;

            using (var session = await client.CreateCodeAnalysisServiceSessionAsync(
                       solution, cancellationToken).ConfigureAwait(false))
            {
                var serializableResults = await session.InvokeAsync <SerializableNavigateToSearchResult[]>(
                    nameof(IRemoteNavigateToSearchService.SearchProjectAsync),
                    SerializableProjectId.Dehydrate(project.Id),
                    searchPattern).ConfigureAwait(false);

                return(serializableResults.Select(r => r.Rehydrate(solution)).ToImmutableArray());
            }
        }