Beispiel #1
0
 public CodeFixCollection(object provider, TextSpan span, ImmutableArray <CodeFix> fixes, FixAllCodeActionContext fixAllContext = null)
 {
     this.Provider      = provider;
     this.TextSpan      = span;
     this.Fixes         = fixes;
     this.FixAllContext = fixAllContext;
 }
Beispiel #2
0
 public CodeFixCollection(object provider, TextSpan span, ImmutableArray<CodeFix> fixes, FixAllCodeActionContext fixAllContext = null)
 {
     this.Provider = provider;
     this.TextSpan = span;
     this.Fixes = fixes;
     this.FixAllContext = fixAllContext;
 }
Beispiel #3
0
        private async Task <List <CodeFixCollection> > AppendFixesOrSuppressionsAsync(
            Document document,
            TextSpan span,
            IEnumerable <Diagnostic> diagnosticsWithSameSpan,
            List <CodeFixCollection> result,
            object fixer,
            Func <Diagnostic, bool> hasFix,
            Func <ImmutableArray <Diagnostic>, Task <IEnumerable <CodeFix> > > getFixes,
            CancellationToken cancellationToken)
        {
            var diagnostics = diagnosticsWithSameSpan.Where(d => hasFix(d)).OrderByDescending(d => d.Severity).ToImmutableArray();

            if (diagnostics.Length <= 0)
            {
                // this can happen for suppression case where all diagnostics can't be suppressed
                return(result);
            }

            var extensionManager = document.Project.Solution.Workspace.Services.GetService <IExtensionManager>();
            var fixes            = await extensionManager.PerformFunctionAsync(fixer, () => getFixes(diagnostics), defaultValue : SpecializedCollections.EmptyEnumerable <CodeFix>()).ConfigureAwait(false);

            if (fixes != null && fixes.Any())
            {
                FixAllCodeActionContext fixAllContext = null;
                var codeFixProvider = fixer as CodeFixProvider;
                if (codeFixProvider != null)
                {
                    // If the codeFixProvider supports fix all occurrences, then get the corresponding FixAllProviderInfo and fix all context.
                    var fixAllProviderInfo = extensionManager.PerformFunction(codeFixProvider, () => ImmutableInterlocked.GetOrAdd(ref _fixAllProviderMap, codeFixProvider, FixAllProviderInfo.Create), defaultValue: null);

                    if (fixAllProviderInfo != null)
                    {
                        fixAllContext = FixAllCodeActionContext.Create(document, fixAllProviderInfo, codeFixProvider, diagnostics, this.GetDocumentDiagnosticsAsync, this.GetProjectDiagnosticsAsync, cancellationToken);
                    }
                }

                result = result ?? new List <CodeFixCollection>();
                var codeFix = new CodeFixCollection(fixer, span, fixes, fixAllContext);
                result.Add(codeFix);
            }

            return(result);
        }
Beispiel #4
0
        private async Task<List<CodeFixCollection>> AppendFixesOrSuppressionsAsync(
            Document document,
            TextSpan span,
            IEnumerable<Diagnostic> diagnosticsWithSameSpan,
            List<CodeFixCollection> result,
            object fixer,
            IExtensionManager extensionManager,
            Func<Diagnostic, bool> hasFix,
            Func<ImmutableArray<Diagnostic>, Task<IEnumerable<CodeFix>>> getFixes,
            CancellationToken cancellationToken)
        {
            var diagnostics = diagnosticsWithSameSpan.Where(d => hasFix(d)).OrderByDescending(d => d.Severity).ToImmutableArray();
            if (diagnostics.Length <= 0)
            {
                // this can happen for suppression case where all diagnostics can't be suppressed
                return result;
            }

            var fixes = await extensionManager.PerformFunctionAsync(fixer, () => getFixes(diagnostics)).ConfigureAwait(false);
            if (fixes != null && fixes.Any())
            {
                FixAllCodeActionContext fixAllContext = null;
                var codeFixProvider = fixer as CodeFixProvider;
                if (codeFixProvider != null)
                {
                    // If the codeFixProvider supports fix all occurrences, then get the corresponding FixAllProviderInfo and fix all context.
                    var fixAllProviderInfo = ImmutableInterlocked.GetOrAdd(ref _fixAllProviderMap, codeFixProvider, FixAllProviderInfo.Create);
                    if (fixAllProviderInfo != null)
                    {
                        fixAllContext = new FixAllCodeActionContext(document, fixAllProviderInfo, codeFixProvider, diagnostics, this.GetDocumentDiagnosticsAsync, this.GetProjectDiagnosticsAsync, cancellationToken);
                    }
                }

                result = result ?? new List<CodeFixCollection>();
                var codeFix = new CodeFixCollection(fixer, span, fixes, fixAllContext);
                result.Add(codeFix);
            }

            return result;
        }
Beispiel #5
0
 public CodeFixCollection(object provider, TextSpan span, IEnumerable <CodeFix> fixes, FixAllCodeActionContext fixAllContext = null) :
     this(provider, span, fixes.ToImmutableArray(), fixAllContext)
 {
 }
Beispiel #6
0
 internal FixAllCodeActionContext(Microsoft.CodeAnalysis.CodeFixes.FixAllCodeActionContext inner)
 {
     _inner = inner;
 }
Beispiel #7
0
 public CodeFixCollection(object provider, TextSpan span, IEnumerable<CodeFix> fixes, FixAllCodeActionContext fixAllContext = null) :
     this(provider, span, fixes.ToImmutableArray(), fixAllContext)
 {
 }
 internal FixAllCodeActionContext(Microsoft.CodeAnalysis.CodeFixes.FixAllCodeActionContext inner)
 {
     _inner = inner;
 }