Esempio n. 1
0
            private static async Task <DiagnosticAnalysisResultMap <DiagnosticAnalyzer, DiagnosticAnalysisResult> > AnalyzeOutOfProcAsync(
                RemoteHostClient client, CompilationWithAnalyzers analyzerDriver, Project project, bool forcedAnalysis, CancellationToken cancellationToken)
            {
                var solution = project.Solution;

                using var pooledObject = SharedPools.Default <Dictionary <string, DiagnosticAnalyzer> >().GetPooledObject();
                var analyzerMap = pooledObject.Object;

                analyzerMap.AppendAnalyzerMap(analyzerDriver.Analyzers.Where(a => forcedAnalysis || !a.IsOpenFileOnly(solution.Options)));
                if (analyzerMap.Count == 0)
                {
                    return(DiagnosticAnalysisResultMap <DiagnosticAnalyzer, DiagnosticAnalysisResult> .Empty);
                }

                var argument = new DiagnosticArguments(
                    forcedAnalysis, analyzerDriver.AnalysisOptions.ReportSuppressedDiagnostics, analyzerDriver.AnalysisOptions.LogAnalyzerExecutionTime,
                    project.Id, analyzerMap.Keys.ToArray());

                return(await client.RunRemoteAsync(
                           WellKnownServiceHubService.CodeAnalysis,
                           nameof(IRemoteDiagnosticAnalyzerService.CalculateDiagnosticsAsync),
                           solution,
                           new object[] { argument },
                           callbackTarget : null,
                           (s, c) => ReadCompilerAnalysisResultAsync(s, analyzerMap, project, c),
                           cancellationToken).ConfigureAwait(false));
            }
Esempio n. 2
0
 private async Task UpdatePrimaryWorkspace(RemoteHostClient client, Solution solution)
 {
     await client.RunRemoteAsync(
         WellKnownServiceHubService.RemoteHost,
         nameof(IRemoteHostService.SynchronizePrimaryWorkspaceAsync),
         solution,
         new object[] { await solution.State.GetChecksumAsync(CancellationToken.None), _solutionVersion++ },
         callbackTarget : null,
         CancellationToken.None);
 }
Esempio n. 3
0
        private async Task <DiagnosticAnalysisResultMap <DiagnosticAnalyzer, DiagnosticAnalysisResult> > AnalyzeOutOfProcAsync(
            DocumentAnalysisScope?documentAnalysisScope,
            Project project,
            CompilationWithAnalyzers compilationWithAnalyzers,
            RemoteHostClient client,
            bool forceExecuteAllAnalyzers,
            bool logPerformanceInfo,
            bool getTelemetryInfo,
            CancellationToken cancellationToken)
        {
            var solution = project.Solution;

            using var pooledObject = SharedPools.Default <Dictionary <string, DiagnosticAnalyzer> >().GetPooledObject();
            var analyzerMap = pooledObject.Object;

            var analyzers = documentAnalysisScope?.Analyzers ??
                            compilationWithAnalyzers.Analyzers.Where(a => forceExecuteAllAnalyzers || !a.IsOpenFileOnly(solution.Options));

            analyzerMap.AppendAnalyzerMap(analyzers);

            if (analyzerMap.Count == 0)
            {
                return(DiagnosticAnalysisResultMap <DiagnosticAnalyzer, DiagnosticAnalysisResult> .Empty);
            }

            // Use high priority if we are force executing all analyzers for user action OR serving an active document request.
            var isHighPriority = forceExecuteAllAnalyzers ||
                                 documentAnalysisScope != null && _documentTrackingService?.TryGetActiveDocument() == documentAnalysisScope.TextDocument.Id;

            var argument = new DiagnosticArguments(
                isHighPriority,
                compilationWithAnalyzers.AnalysisOptions.ReportSuppressedDiagnostics,
                logPerformanceInfo,
                getTelemetryInfo,
                documentAnalysisScope?.TextDocument.Id,
                documentAnalysisScope?.Span,
                documentAnalysisScope?.Kind,
                project.Id,
                analyzerMap.Keys.ToArray());

            return(await client.RunRemoteAsync(
                       WellKnownServiceHubService.CodeAnalysis,
                       nameof(IRemoteDiagnosticAnalyzerService.CalculateDiagnosticsAsync),
                       solution,
                       new object[] { argument },
                       callbackTarget : null,
                       (s, c) => ReadCompilerAnalysisResultAsync(s, analyzerMap, documentAnalysisScope, project, c),
                       cancellationToken).ConfigureAwait(false));
        }
 public async Task <Optional <T> > TryRunRemoteAsync <T>(string targetName, Solution?solution, IReadOnlyList <object?> arguments, CancellationToken cancellationToken)
 => await _client.RunRemoteAsync <T>(WellKnownServiceHubService.Razor, targetName, solution, arguments, callbackTarget : null, cancellationToken).ConfigureAwait(false);