Beispiel #1
0
            protected override void WriteTo(Stream stream, Data data, CancellationToken cancellationToken)
            {
                using (var writer = new StreamObjectWriter(stream, cancellationToken: cancellationToken))
                {
                    writer.WriteString(FormatVersion);
                    data.TextVersion.WriteTo(writer);
                    data.SyntaxVersion.WriteTo(writer);

                    writer.WriteInt32(data.Items.Length);

                    foreach (var item in data.Items.OfType <TodoItem>())
                    {
                        cancellationToken.ThrowIfCancellationRequested();

                        writer.WriteInt32(item.Priority);
                        writer.WriteString(item.Message);

                        writer.WriteString(item.OriginalFilePath);
                        writer.WriteInt32(item.OriginalLine);
                        writer.WriteInt32(item.OriginalColumn);

                        writer.WriteString(item.MappedFilePath);
                        writer.WriteInt32(item.MappedLine);
                        writer.WriteInt32(item.MappedColumn);
                    }
                }
            }
 protected override void WriteTo(Stream stream, Data data, CancellationToken cancellationToken)
 {
     using (var writer = new StreamObjectWriter(stream, cancellationToken: cancellationToken))
     {
         writer.WriteString(FormatVersion);
         data.TextVersion.WriteTo(writer);
         data.SemanticVersion.WriteTo(writer);
         writer.WriteString(data.DesignerAttributeArgument);
     }
 }
Beispiel #3
0
        private static Checksum CreateChecksum(AnalyzerReference reference)
        {
            using (var stream = SerializableBytes.CreateWritableStream())
                using (var objectWriter = new StreamObjectWriter(stream))
                {
                    objectWriter.WriteString(WellKnownSynchronizationKinds.AnalyzerReference);
                    objectWriter.WriteString(reference.FullPath);

                    return(Checksum.Create(stream));
                }
        }
Beispiel #4
0
 public static Checksum Create <T>(T value, string kind, Serializer serializer)
 {
     using (var stream = SerializableBytes.CreateWritableStream())
         using (var objectWriter = new StreamObjectWriter(stream))
         {
             objectWriter.WriteString(kind);
             serializer.Serialize(value, objectWriter, CancellationToken.None);
             return(Create(stream));
         }
 }
Beispiel #5
0
 private static Checksum CreateChecksumFromStreamWriter(string kind, Action <ObjectWriter, CancellationToken> writer)
 {
     using (var stream = SerializableBytes.CreateWritableStream())
         using (var objectWriter = new StreamObjectWriter(stream))
         {
             objectWriter.WriteString(kind);
             writer(objectWriter, CancellationToken.None);
             return(Checksum.Create(stream));
         }
 }
Beispiel #6
0
        public static Checksum Create(IObjectWritable @object, string kind)
        {
            using (var stream = SerializableBytes.CreateWritableStream())
                using (var objectWriter = new StreamObjectWriter(stream))
                {
                    objectWriter.WriteString(kind);
                    @object.WriteTo(objectWriter);

                    return(Create(stream));
                }
        }
Beispiel #7
0
        public static Checksum Create(string kind, Checksum checksum)
        {
            using (var stream = SerializableBytes.CreateWritableStream())
                using (var writer = new StreamObjectWriter(stream))
                {
                    writer.WriteString(kind);
                    checksum.WriteTo(writer);

                    return(Create(stream));
                }
        }
        public static Checksum Create(string kind, ImmutableArray <byte> bytes)
        {
            using (var stream = SerializableBytes.CreateWritableStream())
                using (var writer = new StreamObjectWriter(stream))
                {
                    writer.WriteString(kind);

                    for (var i = 0; i < bytes.Length; i++)
                    {
                        writer.WriteByte(bytes[i]);
                    }

                    return(Create(stream));
                }
        }
        public static Checksum Create(string kind, IEnumerable <Checksum> checksums)
        {
            using (var stream = SerializableBytes.CreateWritableStream())
                using (var writer = new StreamObjectWriter(stream))
                {
                    writer.WriteString(kind);

                    foreach (var checksum in checksums)
                    {
                        checksum.WriteTo(writer);
                    }

                    return(Create(stream));
                }
        }
        private bool WriteIdentifierLocations(EsentStorage.Key key, Document document, VersionStamp version, SyntaxNode root, CancellationToken cancellationToken)
        {
            // delete any existing data
            if (!DeleteIdentifierLocations(key, cancellationToken))
            {
                return(false);
            }

            var identifierMap = SharedPools.StringIgnoreCaseDictionary <int>().AllocateAndClear();

            Dictionary <string, List <int> > map = null;

            try
            {
                map = CreateIdentifierLocations(document, root, cancellationToken);

                // okay, write new data
                using (var accessor = _esentStorage.GetIdentifierLocationTableAccessor())
                {
                    // make sure I have all identifier ready before starting big insertion
                    int identifierId;
                    foreach (var identifier in map.Keys)
                    {
                        if (!TryGetUniqueIdentifierId(identifier, out identifierId))
                        {
                            return(false);
                        }

                        identifierMap[identifier] = identifierId;
                    }

                    // save whole map
                    var uncommittedCount = 0;

                    foreach (var kv in map)
                    {
                        cancellationToken.ThrowIfCancellationRequested();

                        var identifier = kv.Key;
                        var positions  = kv.Value;

                        if ((uncommittedCount + positions.Count) > FlushThreshold)
                        {
                            accessor.Flush();
                            uncommittedCount = 0;
                        }

                        accessor.PrepareBatchOneInsert();

                        identifierId = identifierMap[identifier];

                        using (var stream = accessor.GetWriteStream(key, identifierId))
                            using (var writer = new StreamObjectWriter(stream, cancellationToken: cancellationToken))
                            {
                                writer.WriteString(IdentifierSetSerializationVersion);
                                WriteList(writer, positions);
                            }

                        accessor.FinishBatchOneInsert();

                        uncommittedCount += positions.Count;
                    }

                    // save special identifier that indicates version for this document
                    if (!TrySaveIdentifierSetVersion(accessor, key, version))
                    {
                        return(false);
                    }

                    return(accessor.ApplyChanges());
                }
            }
            finally
            {
                SharedPools.StringIgnoreCaseDictionary <int>().ClearAndFree(identifierMap);
                Free(map);
            }
        }