diff options
Diffstat (limited to 'tools/aapt2/format/proto/ProtoSerialize.cpp')
-rw-r--r-- | tools/aapt2/format/proto/ProtoSerialize.cpp | 63 |
1 files changed, 17 insertions, 46 deletions
diff --git a/tools/aapt2/format/proto/ProtoSerialize.cpp b/tools/aapt2/format/proto/ProtoSerialize.cpp index c0d36141d457..1d184fe5a8d2 100644 --- a/tools/aapt2/format/proto/ProtoSerialize.cpp +++ b/tools/aapt2/format/proto/ProtoSerialize.cpp @@ -16,14 +16,9 @@ #include "format/proto/ProtoSerialize.h" -#include "google/protobuf/io/zero_copy_stream_impl_lite.h" - #include "ValueVisitor.h" #include "util/BigBuffer.h" -using ::google::protobuf::io::CodedOutputStream; -using ::google::protobuf::io::ZeroCopyOutputStream; - namespace aapt { void SerializeStringPoolToPb(const StringPool& pool, pb::StringPool* out_pb_pool) { @@ -366,6 +361,19 @@ static pb::Plural_Arity SerializePluralEnumToPb(size_t plural_idx) { return pb::Plural_Arity_OTHER; } +static pb::FileReference::Type SerializeFileReferenceTypeToPb(const ResourceFile::Type& type) { + switch (type) { + case ResourceFile::Type::kBinaryXml: + return pb::FileReference::BINARY_XML; + case ResourceFile::Type::kProtoXml: + return pb::FileReference::PROTO_XML; + case ResourceFile::Type::kPng: + return pb::FileReference::PNG; + default: + return pb::FileReference::UNKNOWN; + } +} + namespace { class ValueSerializer : public ConstValueVisitor { @@ -400,7 +408,9 @@ class ValueSerializer : public ConstValueVisitor { } void Visit(const FileReference* file) override { - out_value_->mutable_item()->mutable_file()->set_path(*file->path); + pb::FileReference* pb_file = out_value_->mutable_item()->mutable_file(); + pb_file->set_path(*file->path); + pb_file->set_type(SerializeFileReferenceTypeToPb(file->type)); } void Visit(const Id* /*id*/) override { @@ -515,6 +525,7 @@ void SerializeItemToPb(const Item& item, pb::Item* out_item) { void SerializeCompiledFileToPb(const ResourceFile& file, pb::internal::CompiledFile* out_file) { out_file->set_resource_name(file.name.ToString()); out_file->set_source_path(file.source.path); + out_file->set_type(SerializeFileReferenceTypeToPb(file.type)); SerializeConfig(file.config, out_file->mutable_config()); for (const SourcedResourceName& exported : file.exported_symbols) { @@ -579,44 +590,4 @@ void SerializeXmlResourceToPb(const xml::XmlResource& resource, pb::XmlNode* out SerializeXmlToPb(*resource.root, out_node); } -CompiledFileOutputStream::CompiledFileOutputStream(ZeroCopyOutputStream* out) : out_(out) { -} - -void CompiledFileOutputStream::EnsureAlignedWrite() { - const int overflow = out_.ByteCount() % 4; - if (overflow > 0) { - uint32_t zero = 0u; - out_.WriteRaw(&zero, 4 - overflow); - } -} - -void CompiledFileOutputStream::WriteLittleEndian32(uint32_t val) { - EnsureAlignedWrite(); - out_.WriteLittleEndian32(val); -} - -void CompiledFileOutputStream::WriteCompiledFile(const pb::internal::CompiledFile& compiled_file) { - EnsureAlignedWrite(); - out_.WriteLittleEndian64(static_cast<uint64_t>(compiled_file.ByteSize())); - compiled_file.SerializeWithCachedSizes(&out_); -} - -void CompiledFileOutputStream::WriteData(const BigBuffer& buffer) { - EnsureAlignedWrite(); - out_.WriteLittleEndian64(static_cast<uint64_t>(buffer.size())); - for (const BigBuffer::Block& block : buffer) { - out_.WriteRaw(block.buffer.get(), block.size); - } -} - -void CompiledFileOutputStream::WriteData(const void* data, size_t len) { - EnsureAlignedWrite(); - out_.WriteLittleEndian64(static_cast<uint64_t>(len)); - out_.WriteRaw(data, len); -} - -bool CompiledFileOutputStream::HadError() { - return out_.HadError(); -} - } // namespace aapt |