private ImmutableDictionary <string, ImmutableArray <DiagnosticDescriptor> > ConvertReferenceIdentityToName(
            ImmutableDictionary <object, ImmutableArray <DiagnosticDescriptor> > descriptorsPerReference, Project?project = null)
        {
            var map = _analyzerInfoCache.CreateAnalyzerReferencesMap(project);

            var builder = ImmutableDictionary.CreateBuilder <string, ImmutableArray <DiagnosticDescriptor> >();

            foreach (var(id, descriptors) in descriptorsPerReference)
            {
                if (!map.TryGetValue(id, out var reference) || reference == null)
                {
                    continue;
                }

                var displayName = GetDisplayName(reference);
                // if there are duplicates, merge descriptors
                if (builder.TryGetValue(displayName, out var existing))
                {
                    builder[displayName] = existing.AddRange(descriptors);
                    continue;
                }

                builder.Add(displayName, descriptors);
            }

            return(builder.ToImmutable());
        }
 private TestDiagnosticAnalyzerService(
     DiagnosticAnalyzerInfoCache analyzerInfoCache,
     AbstractHostDiagnosticUpdateSource hostDiagnosticUpdateSource,
     Action <Exception, DiagnosticAnalyzer, Diagnostic> onAnalyzerException,
     IDiagnosticUpdateSourceRegistrationService registrationService = null,
     IAsynchronousOperationListener listener = null)
     : base(analyzerInfoCache, hostDiagnosticUpdateSource, registrationService ?? new MockDiagnosticUpdateSourceRegistrationService(), listener)
 {
     _hostAnalyzerReferenceMap = analyzerInfoCache.CreateAnalyzerReferencesMap(project : null);
     _onAnalyzerException      = onAnalyzerException;
 }