private async Task <DiagnosticAnalysisResultMap <DiagnosticAnalyzer, DiagnosticAnalysisResult> > AnalyzeOutOfProcAsync( RemoteHostClient client, CompilationWithAnalyzers analyzerDriver, Project project, CancellationToken cancellationToken) { var solution = project.Solution; var snapshotService = solution.Workspace.Services.GetService <ISolutionChecksumService>(); // TODO: this should be moved out var hostChecksums = GetHostAnalyzerReferences(snapshotService, _analyzerService.GetHostAnalyzerReferences(), cancellationToken); var analyzerMap = CreateAnalyzerMap(analyzerDriver.Analyzers.Where(a => !a.MustRunInProcess())); if (analyzerMap.Count == 0) { return(DiagnosticAnalysisResultMap.Create(ImmutableDictionary <DiagnosticAnalyzer, DiagnosticAnalysisResult> .Empty, ImmutableDictionary <DiagnosticAnalyzer, AnalyzerTelemetryInfo> .Empty)); } // TODO: send telemetry on session using (var session = await client.CreateCodeAnalysisServiceSessionAsync(solution, cancellationToken).ConfigureAwait(false)) { var argument = new DiagnosticArguments( analyzerDriver.AnalysisOptions.ReportSuppressedDiagnostics, analyzerDriver.AnalysisOptions.LogAnalyzerExecutionTime, project.Id, hostChecksums, analyzerMap.Keys.ToArray()); var result = await session.InvokeAsync( WellKnownServiceHubServices.CodeAnalysisService_CalculateDiagnosticsAsync, new object[] { argument }, (s, c) => GetCompilerAnalysisResultAsync(s, analyzerMap, project, c)).ConfigureAwait(false); ReportAnalyzerExceptions(project, result.Exceptions); return(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(); } }
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()); } }
private async Task<ImmutableArray<INavigateToSearchResult>> SearchDocumentInRemoteProcessAsync( RemoteHostClient client, Document document, string searchPattern, CancellationToken cancellationToken) { var solution = document.Project.Solution; using (var session = await client.CreateCodeAnalysisServiceSessionAsync( solution, cancellationToken).ConfigureAwait(false)) { var serializableResults = await session.InvokeAsync<SerializableNavigateToSearchResult[]>( WellKnownServiceHubServices.CodeAnalysisService_SearchDocumentAsync, SerializableDocumentId.Dehydrate(document), searchPattern).ConfigureAwait(false); return serializableResults.Select(r => r.Rehydrate(solution)).ToImmutableArray(); } }
private async Task<DiagnosticAnalysisResultMap<DiagnosticAnalyzer, DiagnosticAnalysisResult>> AnalyzeOutOfProcAsync( RemoteHostClient client, CompilationWithAnalyzers analyzerDriver, Project project, CancellationToken cancellationToken) { var solution = project.Solution; var snapshotService = solution.Workspace.Services.GetService<ISolutionChecksumService>(); // TODO: this should be moved out var analyzerMap = CreateAnalyzerMap(analyzerDriver.Analyzers); if (analyzerMap.Count == 0) { return DiagnosticAnalysisResultMap.Create(ImmutableDictionary<DiagnosticAnalyzer, DiagnosticAnalysisResult>.Empty, ImmutableDictionary<DiagnosticAnalyzer, AnalyzerTelemetryInfo>.Empty); } var optionAsset = GetOptionsAsset(solution, project.Language, cancellationToken); var hostChecksums = GetHostAnalyzerReferences(snapshotService, _analyzerService.GetHostAnalyzerReferences(), cancellationToken); var argument = new DiagnosticArguments( analyzerDriver.AnalysisOptions.ReportSuppressedDiagnostics, analyzerDriver.AnalysisOptions.LogAnalyzerExecutionTime, project.Id, optionAsset.Checksum.ToArray(), hostChecksums, analyzerMap.Keys.ToArray()); // TODO: send telemetry on session using (var session = await client.CreateCodeAnalysisServiceSessionAsync(solution, cancellationToken).ConfigureAwait(false)) { session.AddAdditionalAssets(optionAsset); var result = await session.InvokeAsync( WellKnownServiceHubServices.CodeAnalysisService_CalculateDiagnosticsAsync, new object[] { argument }, (s, c) => GetCompilerAnalysisResultAsync(s, analyzerMap, project, c)).ConfigureAwait(false); ReportAnalyzerExceptions(project, result.Exceptions); return result; } }