public static AnalyzerExecutor GetAnalyzerExecutorForSupportedDiagnostics( DiagnosticAnalyzer analyzer, AbstractHostDiagnosticUpdateSource hostDiagnosticUpdateSource, Func <Exception, DiagnosticAnalyzer, bool> continueOnAnalyzerException, CancellationToken cancellationToken) { var addExceptionDiagnostic = GetAddExceptionDiagnosticDelegate(analyzer, hostDiagnosticUpdateSource, hostDiagnosticUpdateSource?.Workspace); // Skip telemetry logging if the exception is thrown as we are computing supported diagnostics and // we can't determine if any descriptors support getting telemetry without having the descriptors. return(AnalyzerExecutor.CreateForSupportedDiagnostics(addExceptionDiagnostic, continueOnAnalyzerException, cancellationToken)); }
internal static AnalyzerExecutor GetAnalyzerExecutorForSupportedDiagnostics( DiagnosticAnalyzer analyzer, AbstractHostDiagnosticUpdateSource hostDiagnosticUpdateSource, Action <Exception, DiagnosticAnalyzer, Diagnostic> onAnalyzerException = null, CancellationToken cancellationToken = default(CancellationToken)) { // Skip telemetry logging if the exception is thrown as we are computing supported diagnostics and // we can't determine if any descriptors support getting telemetry without having the descriptors. Action <Exception, DiagnosticAnalyzer, Diagnostic> defaultOnAnalyzerException = (ex, a, diagnostic) => OnAnalyzerException_NoTelemetryLogging(ex, a, diagnostic, hostDiagnosticUpdateSource); return(AnalyzerExecutor.CreateForSupportedDiagnostics(onAnalyzerException ?? defaultOnAnalyzerException, AnalyzerManager.Instance, cancellationToken)); }
/// <summary> /// Returns true if all the diagnostics that can be produced by this analyzer are suppressed through options. /// <param name="analyzer">Analyzer to be checked for suppression.</param> /// <param name="options">Compilation options.</param> /// <param name="onAnalyzerException"> /// Optional delegate which is invoked when an analyzer throws an exception. /// Delegate can do custom tasks such as report the given analyzer exception diagnostic, report a non-fatal watson for the exception, etc. /// </param> /// </summary> public static bool IsDiagnosticAnalyzerSuppressed(DiagnosticAnalyzer analyzer, CompilationOptions options, Action <Exception, DiagnosticAnalyzer, Diagnostic> onAnalyzerException = null) { VerifyAnalyzerArgumentForStaticApis(analyzer); if (options == null) { throw new ArgumentNullException(nameof(options)); } var analyzerExecutor = AnalyzerExecutor.CreateForSupportedDiagnostics(onAnalyzerException, AnalyzerManager.Instance); return(AnalyzerDriver.IsDiagnosticAnalyzerSuppressed(analyzer, options, AnalyzerManager.Instance, analyzerExecutor)); }
/// <summary> /// Returns true if all the diagnostics that can be produced by this analyzer are suppressed through options. /// <param name="analyzer">Analyzer to be checked for suppression.</param> /// <param name="options">Compilation options.</param> /// <param name="onAnalyzerException"> /// Optional delegate which is invoked when an analyzer throws an exception. /// Delegate can do custom tasks such as report the given analyzer exception diagnostic, report a non-fatal watson for the exception, etc. /// </param> /// </summary> public static bool IsDiagnosticAnalyzerSuppressed(DiagnosticAnalyzer analyzer, CompilationOptions options, Action <Exception, DiagnosticAnalyzer, Diagnostic> onAnalyzerException = null) { if (analyzer == null) { throw new ArgumentNullException(nameof(analyzer)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } Action <Exception, DiagnosticAnalyzer, Diagnostic> voidHandler = (ex, a, diag) => { }; onAnalyzerException = onAnalyzerException ?? voidHandler; var analyzerExecutor = AnalyzerExecutor.CreateForSupportedDiagnostics(onAnalyzerException, CancellationToken.None); return(AnalyzerDriver.IsDiagnosticAnalyzerSuppressed(analyzer, options, AnalyzerManager.Instance, analyzerExecutor)); }
/// <summary> /// Returns true if all the diagnostics that can be produced by this analyzer are suppressed through options. /// <paramref name="continueOnAnalyzerException"/> says whether the caller would like the exception thrown by the analyzers to be handled or not. If true - Handles ; False - Not handled. /// </summary> public static bool IsDiagnosticAnalyzerSuppressed(DiagnosticAnalyzer analyzer, CompilationOptions options, Func <Exception, DiagnosticAnalyzer, bool> continueOnAnalyzerException) { if (analyzer == null) { throw new ArgumentNullException(nameof(analyzer)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } if (continueOnAnalyzerException == null) { throw new ArgumentNullException(nameof(continueOnAnalyzerException)); } // TODO: Public API change to surface exception diagnostics? Action <Diagnostic> addExceptionDiagnostic = diagnostic => { }; var analyzerExecutor = AnalyzerExecutor.CreateForSupportedDiagnostics(addExceptionDiagnostic, continueOnAnalyzerException, CancellationToken.None); return(AnalyzerDriver.IsDiagnosticAnalyzerSuppressed(analyzer, options, AnalyzerManager.Instance, analyzerExecutor)); }