public async override Task<CodeAction> GetFixAsync(FixAllContext fixAllContext)
            {
                var batchFixer = (BatchFixAllProvider)WellKnownFixAllProviders.BatchFixer;
                var fixMultipleContext = fixAllContext as FixMultipleContext;
                var suppressionFixer = (AbstractSuppressionCodeFixProvider)((WrapperCodeFixProvider)fixAllContext.CodeFixProvider).SuppressionFixProvider;
                var isGlobalSuppression = NestedSuppressionCodeAction.IsEquivalenceKeyForGlobalSuppression(fixAllContext.CodeActionEquivalenceKey);
                if (!isGlobalSuppression)
                {
                    // Pragma warning fix all.
                    batchFixer = new PragmaWarningBatchFixAllProvider(suppressionFixer);
                }

                var title = fixAllContext.CodeActionEquivalenceKey;
                if (fixAllContext.Document != null)
                {
                    var documentsAndDiagnosticsToFixMap = fixMultipleContext != null ?
                        fixMultipleContext.DocumentDiagnosticsToFix :
                        await batchFixer.GetDocumentDiagnosticsToFixAsync(fixAllContext).ConfigureAwait(false);

                    return !isGlobalSuppression ?
                        await batchFixer.GetFixAsync(documentsAndDiagnosticsToFixMap, fixAllContext).ConfigureAwait(false) :
                        CreateGlobalSuppressionFixAllAction(title, suppressionFixer, fixAllContext.Document, documentsAndDiagnosticsToFixMap);
                }
                else
                {
                    var projectsAndDiagnosticsToFixMap = fixMultipleContext != null ?
                        fixMultipleContext.ProjectDiagnosticsToFix :
                        await batchFixer.GetProjectDiagnosticsToFixAsync(fixAllContext).ConfigureAwait(false);

                    return !isGlobalSuppression ?
                        await batchFixer.GetFixAsync(projectsAndDiagnosticsToFixMap, fixAllContext).ConfigureAwait(false) :
                        CreateGlobalSuppressionFixAllAction(title, suppressionFixer, fixAllContext.Project, projectsAndDiagnosticsToFixMap);
                }
            }
            public async override Task <CodeAction> GetFixAsync(FixAllContext fixAllContext)
            {
                var batchFixer          = (BatchFixAllProvider)WellKnownFixAllProviders.BatchFixer;
                var suppressionFixer    = (AbstractSuppressionCodeFixProvider)((WrapperCodeFixProvider)fixAllContext.CodeFixProvider).SuppressionFixProvider;
                var isGlobalSuppression = NestedSuppressionCodeAction.IsEquivalenceKeyForGlobalSuppression(fixAllContext.CodeActionEquivalenceKey);

                if (!isGlobalSuppression)
                {
                    // Pragma warning fix all.
                    batchFixer = new PragmaWarningBatchFixAllProvider(suppressionFixer);
                    return(await batchFixer.GetFixAsync(fixAllContext).ConfigureAwait(false));
                }

                var title = fixAllContext.CodeActionEquivalenceKey;

                if (fixAllContext.Document != null)
                {
                    var documentsAndDiagnosticsToFixMap = await batchFixer.GetDocumentDiagnosticsToFixAsync(fixAllContext).ConfigureAwait(false);

                    return(CreateGlobalSuppressionFixAllAction(title, suppressionFixer, fixAllContext.Document, documentsAndDiagnosticsToFixMap));
                }
                else
                {
                    var projectsAndDiagnosticsToFixMap = await batchFixer.GetProjectDiagnosticsToFixAsync(fixAllContext).ConfigureAwait(false);

                    return(CreateGlobalSuppressionFixAllAction(title, suppressionFixer, fixAllContext.Project, projectsAndDiagnosticsToFixMap));
                }
            }
Exemplo n.º 3
0
            public override async Task <CodeAction> GetFixAsync(FixAllContext fixAllContext)
            {
                // currently there's no FixAll support for local suppression, just bail out
                if (NestedSuppressionCodeAction.IsEquivalenceKeyForLocalSuppression(fixAllContext.CodeActionEquivalenceKey))
                {
                    return(null);
                }

                var suppressionFixer = (AbstractSuppressionCodeFixProvider)((WrapperCodeFixProvider)fixAllContext.CodeFixProvider).SuppressionFixProvider;

                if (NestedSuppressionCodeAction.IsEquivalenceKeyForGlobalSuppression(fixAllContext.CodeActionEquivalenceKey))
                {
                    var fallbackOptions = fixAllContext.GetOptionsProvider();

                    // For global suppressions, we defer to the global suppression system to handle directly.
                    var title = fixAllContext.CodeActionEquivalenceKey;
                    return(fixAllContext.Document != null
                        ? GlobalSuppressMessageFixAllCodeAction.Create(
                               title, suppressionFixer, fixAllContext.Document,
                               await fixAllContext.GetDocumentDiagnosticsToFixAsync().ConfigureAwait(false),
                               fallbackOptions)
                        : GlobalSuppressMessageFixAllCodeAction.Create(
                               title, suppressionFixer, fixAllContext.Project,
                               await fixAllContext.GetProjectDiagnosticsToFixAsync().ConfigureAwait(false),
                               fallbackOptions));
                }

                if (NestedSuppressionCodeAction.IsEquivalenceKeyForPragmaWarning(fixAllContext.CodeActionEquivalenceKey))
                {
                    var batchFixer = new PragmaWarningBatchFixAllProvider(suppressionFixer);
                    return(await batchFixer.GetFixAsync(fixAllContext).ConfigureAwait(false));
                }

                if (NestedSuppressionCodeAction.IsEquivalenceKeyForRemoveSuppression(fixAllContext.CodeActionEquivalenceKey))
                {
                    var batchFixer = RemoveSuppressionCodeAction.GetBatchFixer(suppressionFixer);
                    return(await batchFixer.GetFixAsync(fixAllContext).ConfigureAwait(false));
                }

                throw ExceptionUtilities.Unreachable;
            }