// *DO NOT DELETE* // This is used by Ruleset Editor from ManagedSourceCodeAnalysis.dll. public IReadOnlyDictionary <string, IEnumerable <DiagnosticDescriptor> > GetAllDiagnosticDescriptors(IVsHierarchy hierarchyOpt) { if (hierarchyOpt == null) { return(Transform(_diagnosticService.CreateDiagnosticDescriptorsPerReference(projectOpt: null))); } // Analyzers are only supported for C# and VB currently. var projectsWithHierarchy = (_workspace.DeferredState?.ProjectTracker.ImmutableProjects ?? ImmutableArray <AbstractProject> .Empty) .Where(p => p.Language == LanguageNames.CSharp || p.Language == LanguageNames.VisualBasic) .Where(p => p.Hierarchy == hierarchyOpt) .Select(p => _workspace.CurrentSolution.GetProject(p.Id)); if (projectsWithHierarchy.Count() <= 1) { return(Transform(_diagnosticService.CreateDiagnosticDescriptorsPerReference(projectsWithHierarchy.FirstOrDefault()))); } else { // Multiple workspace projects map to the same hierarchy, return a union of descriptors for all projects. // For example, this can happen for web projects where we create on the fly projects for aspx files. var descriptorsMap = ImmutableDictionary.CreateBuilder <string, IEnumerable <DiagnosticDescriptor> >(); foreach (var project in projectsWithHierarchy) { var newDescriptorTuples = _diagnosticService.CreateDiagnosticDescriptorsPerReference(project); foreach (var kvp in newDescriptorTuples) { if (descriptorsMap.TryGetValue(kvp.Key, out var existingDescriptors)) { descriptorsMap[kvp.Key] = existingDescriptors.Concat(kvp.Value).Distinct(); } else { descriptorsMap[kvp.Key] = kvp.Value; } } } return(descriptorsMap.ToImmutable()); } }