private ImmutableDictionary <string, ImmutableArray <DiagnosticDescriptor> > ConvertReferenceIdentityToName( ImmutableDictionary <object, ImmutableArray <DiagnosticDescriptor> > descriptorsPerReference, Project projectOpt = null) { var map = _hostAnalyzerManager.CreateAnalyzerReferencesMap(projectOpt); var builder = ImmutableDictionary.CreateBuilder <string, ImmutableArray <DiagnosticDescriptor> >(); foreach (var kv in descriptorsPerReference) { var id = kv.Key; var descriptors = kv.Value; AnalyzerReference reference; if (!map.TryGetValue(id, out reference) || reference == null) { continue; } var displayName = GetDisplayName(reference); // if there are duplicates, merge descriptors ImmutableArray <DiagnosticDescriptor> existing; if (builder.TryGetValue(displayName, out existing)) { builder[displayName] = existing.AddRange(descriptors); continue; } builder.Add(displayName, descriptors); } return(builder.ToImmutable()); }
private TestDiagnosticAnalyzerService( HostAnalyzerManager hostAnalyzerManager, AbstractHostDiagnosticUpdateSource hostDiagnosticUpdateSource, Action <Exception, DiagnosticAnalyzer, Diagnostic> onAnalyzerException, IDiagnosticUpdateSourceRegistrationService registrationService = null) : base(hostAnalyzerManager, hostDiagnosticUpdateSource, registrationService ?? new MockDiagnosticUpdateSourceRegistrationService()) { _hostAnalyzerReferenceMap = hostAnalyzerManager.CreateAnalyzerReferencesMap(projectOpt: null); _onAnalyzerException = onAnalyzerException; }
private TestDiagnosticAnalyzerService( HostAnalyzerManager hostAnalyzerManager, AbstractHostDiagnosticUpdateSource hostDiagnosticUpdateSource, Action<Exception, DiagnosticAnalyzer, Diagnostic> onAnalyzerException, IDiagnosticUpdateSourceRegistrationService registrationService = null) : base(hostAnalyzerManager, hostDiagnosticUpdateSource, registrationService ?? new MockDiagnosticUpdateSourceRegistrationService()) { _hostAnalyzerReferenceMap = hostAnalyzerManager.CreateAnalyzerReferencesMap(projectOpt: null); _onAnalyzerException = onAnalyzerException; }