示例#1
0
        private ImmutableDictionary <DiagnosticId, List <CodeFixProvider> > ComputeProjectFixers(Project project)
        {
            var extensionManager = project.Solution.Workspace.Services.GetService <IExtensionManager>();

            ImmutableDictionary <DiagnosticId, List <CodeFixProvider> > .Builder builder = null;
            foreach (var reference in project.AnalyzerReferences)
            {
                var projectCodeFixerProvider = _analyzerReferenceToFixersMap.GetValue(reference, _createProjectCodeFixProvider);
                foreach (var fixer in projectCodeFixerProvider.GetFixers(project.Language))
                {
                    var fixableIds = this.GetFixableDiagnosticIds(fixer, extensionManager);
                    foreach (var id in fixableIds)
                    {
                        if (string.IsNullOrWhiteSpace(id))
                        {
                            continue;
                        }

                        builder = builder ?? ImmutableDictionary.CreateBuilder <DiagnosticId, List <CodeFixProvider> >();
                        var list = builder.GetOrAdd(id, s_createList);
                        list.Add(fixer);
                    }
                }
            }

            if (builder == null)
            {
                return(ImmutableDictionary <DiagnosticId, List <CodeFixProvider> > .Empty);
            }

            return(builder.ToImmutable());
        }