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()); }
public static void Serialize(ObjectWriter writer, DiagnosticAnalysisResultMap<string, DiagnosticAnalysisResultBuilder> result, CancellationToken cancellationToken) { var diagnosticSerializer = new DiagnosticDataSerializer(VersionStamp.Default, VersionStamp.Default); var analysisResult = result.AnalysisResult; writer.WriteInt32(analysisResult.Count); foreach (var kv in analysisResult) { writer.WriteString(kv.Key); Serialize(writer, diagnosticSerializer, kv.Value.SyntaxLocals, cancellationToken); Serialize(writer, diagnosticSerializer, kv.Value.SemanticLocals, cancellationToken); Serialize(writer, diagnosticSerializer, kv.Value.NonLocals, cancellationToken); diagnosticSerializer.WriteTo(writer, kv.Value.Others, cancellationToken); } var telemetryInfo = result.TelemetryInfo; writer.WriteInt32(telemetryInfo.Count); foreach (var kv in telemetryInfo) { writer.WriteString(kv.Key); Serialize(writer, kv.Value, cancellationToken); } var exceptions = result.Exceptions; writer.WriteInt32(exceptions.Count); foreach (var kv in exceptions) { writer.WriteString(kv.Key); diagnosticSerializer.WriteTo(writer, kv.Value, cancellationToken); } }
private static void Serialize( ObjectWriter writer, DiagnosticDataSerializer serializer, ImmutableDictionary<DocumentId, ImmutableArray<DiagnosticData>> diagnostics, CancellationToken cancellationToken) { writer.WriteInt32(diagnostics.Count); foreach (var kv in diagnostics) { Serializer.SerializeDocumentId(kv.Key, writer, cancellationToken); serializer.WriteTo(writer, kv.Value, cancellationToken); } }
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(); }