Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
 public void SerializeMetadataReference(
     MetadataReference reference,
     ObjectWriter writer,
     SolutionReplicationContext context,
     CancellationToken cancellationToken
     )
 {
     cancellationToken.ThrowIfCancellationRequested();
     WriteMetadataReferenceTo(reference, writer, context, cancellationToken);
 }
Esempio n. 3
0
        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);
                }
            }
        }