// virtual for testing purposes. internal virtual Action <Exception, DiagnosticAnalyzer, Diagnostic> GetOnAnalyzerException(ProjectId projectId, DiagnosticLogAggregator logAggregatorOpt) { return((ex, analyzer, diagnostic) => { // Log telemetry, if analyzer supports telemetry. DiagnosticAnalyzerLogger.LogAnalyzerCrashCount(analyzer, ex, logAggregatorOpt); AnalyzerHelper.OnAnalyzerException_NoTelemetryLogging(ex, analyzer, diagnostic, _hostDiagnosticUpdateSource, projectId); }); }
/// <summary> /// Return true if the given <paramref name="analyzer"/> is suppressed for the given project. /// </summary> public bool IsAnalyzerSuppressed(DiagnosticAnalyzer analyzer, Project project) { var options = project.CompilationOptions; if (options == null || IsCompilerDiagnosticAnalyzer(project.Language, analyzer)) { return(false); } // don't capture project var projectId = project.Id; // Skip telemetry logging for supported diagnostics, as that can cause an infinite loop. void onAnalyzerException(Exception ex, DiagnosticAnalyzer a, Diagnostic diagnostic) => AnalyzerHelper.OnAnalyzerException_NoTelemetryLogging(ex, a, diagnostic, _hostDiagnosticUpdateSource, projectId); return(CompilationWithAnalyzers.IsDiagnosticAnalyzerSuppressed(analyzer, options, onAnalyzerException)); }