public void SerializeSourceText( SerializableSourceText text, ObjectWriter writer, SolutionReplicationContext context, CancellationToken cancellationToken ) { cancellationToken.ThrowIfCancellationRequested(); if (text.Storage is not null) { context.AddResource(text.Storage); writer.WriteInt32((int)text.Storage.ChecksumAlgorithm); writer.WriteEncoding(text.Storage.Encoding); writer.WriteInt32((int)SerializationKinds.MemoryMapFile); writer.WriteString(text.Storage.Name); writer.WriteInt64(text.Storage.Offset); writer.WriteInt64(text.Storage.Size); } else { RoslynDebug.AssertNotNull(text.Text); writer.WriteInt32((int)text.Text.ChecksumAlgorithm); writer.WriteEncoding(text.Text.Encoding); writer.WriteInt32((int)SerializationKinds.Bits); text.Text.WriteTo(writer, cancellationToken); } }
public void SerializeMetadataReference( MetadataReference reference, ObjectWriter writer, SolutionReplicationContext context, CancellationToken cancellationToken ) { cancellationToken.ThrowIfCancellationRequested(); WriteMetadataReferenceTo(reference, writer, context, cancellationToken); }
public void Serialize(object value, ObjectWriter writer, SolutionReplicationContext context, CancellationToken cancellationToken) { var kind = value.GetWellKnownSynchronizationKind(); using (Logger.LogBlock(FunctionId.Serializer_Serialize, s_logKind, kind, cancellationToken)) { cancellationToken.ThrowIfCancellationRequested(); if (value is ChecksumWithChildren checksumWithChildren) { SerializeChecksumWithChildren(checksumWithChildren, writer, cancellationToken); return; } switch (kind) { case WellKnownSynchronizationKind.Null: // do nothing return; case WellKnownSynchronizationKind.SolutionAttributes: case WellKnownSynchronizationKind.ProjectAttributes: case WellKnownSynchronizationKind.DocumentAttributes: ((IObjectWritable)value).WriteTo(writer); return; case WellKnownSynchronizationKind.CompilationOptions: SerializeCompilationOptions((CompilationOptions)value, writer, cancellationToken); return; case WellKnownSynchronizationKind.ParseOptions: cancellationToken.ThrowIfCancellationRequested(); SerializeParseOptions((ParseOptions)value, writer); return; case WellKnownSynchronizationKind.ProjectReference: SerializeProjectReference((ProjectReference)value, writer, cancellationToken); return; case WellKnownSynchronizationKind.MetadataReference: SerializeMetadataReference((MetadataReference)value, writer, context, cancellationToken); return; case WellKnownSynchronizationKind.AnalyzerReference: SerializeAnalyzerReference((AnalyzerReference)value, writer, cancellationToken: cancellationToken); return; case WellKnownSynchronizationKind.SerializableSourceText: SerializeSourceText((SerializableSourceText)value, writer, context, cancellationToken); return; case WellKnownSynchronizationKind.SourceText: SerializeSourceText(new SerializableSourceText((SourceText)value), writer, context, cancellationToken); return; case WellKnownSynchronizationKind.OptionSet: SerializeOptionSet((SerializableOptionSet)value, writer, cancellationToken); return; default: // object that is not part of solution is not supported since we don't know what inputs are required to // serialize it throw ExceptionUtilities.UnexpectedValue(kind); } } }