public static DiagnosticAnalysisResultMap<DiagnosticAnalyzer, DiagnosticAnalysisResult> Deserialize( ObjectReader reader, IDictionary<string, DiagnosticAnalyzer> analyzerMap, Project project, VersionStamp version, CancellationToken cancellationToken) { var diagnosticDataSerializer = new DiagnosticDataSerializer(VersionStamp.Default, VersionStamp.Default); var analysisMap = ImmutableDictionary.CreateBuilder<DiagnosticAnalyzer, DiagnosticAnalysisResult>(); var analysisCount = reader.ReadInt32(); for (var i = 0; i < analysisCount; i++) { var analyzer = analyzerMap[reader.ReadString()]; var syntaxLocalMap = Deserialize(reader, diagnosticDataSerializer, project, cancellationToken); var semanticLocalMap = Deserialize(reader, diagnosticDataSerializer, project, cancellationToken); var nonLocalMap = Deserialize(reader, diagnosticDataSerializer, project, cancellationToken); var others = diagnosticDataSerializer.ReadFrom(reader, project, cancellationToken); var analysisResult = new DiagnosticAnalysisResult( project.Id, version, syntaxLocalMap, semanticLocalMap, nonLocalMap, others, documentIds: null, fromBuild: false); analysisMap.Add(analyzer, analysisResult); } var telemetryMap = ImmutableDictionary.CreateBuilder<DiagnosticAnalyzer, AnalyzerTelemetryInfo>(); var telemetryCount = reader.ReadInt32(); for (var i = 0; i < telemetryCount; i++) { var analyzer = analyzerMap[reader.ReadString()]; var telemetryInfo = Deserialize(reader, cancellationToken); telemetryMap.Add(analyzer, telemetryInfo); } var exceptionMap = ImmutableDictionary.CreateBuilder<DiagnosticAnalyzer, ImmutableArray<DiagnosticData>>(); var exceptionCount = reader.ReadInt32(); for (var i = 0; i < exceptionCount; i++) { var analyzer = analyzerMap[reader.ReadString()]; var exceptions = diagnosticDataSerializer.ReadFrom(reader, project, cancellationToken); exceptionMap.Add(analyzer, exceptions); } return DiagnosticAnalysisResultMap.Create(analysisMap.ToImmutable(), telemetryMap.ToImmutable(), exceptionMap.ToImmutable()); }
private static ImmutableDictionary<DocumentId, ImmutableArray<DiagnosticData>> Deserialize( ObjectReader reader, DiagnosticDataSerializer serializer, Project project, CancellationToken cancellationToken) { var count = reader.ReadInt32(); var map = ImmutableDictionary.CreateBuilder<DocumentId, ImmutableArray<DiagnosticData>>(); for (var i = 0; i < count; i++) { var documentId = Serializer.DeserializeDocumentId(reader, cancellationToken); var diagnostics = serializer.ReadFrom(reader, project.GetDocument(documentId), cancellationToken); map.Add(documentId, diagnostics); } return map.ToImmutable(); }