| Index: components/tracing/tools/proto_zero_plugin/proto_zero_generator.cc
|
| diff --git a/components/tracing/tools/proto_zero_plugin/proto_zero_generator.cc b/components/tracing/tools/proto_zero_plugin/proto_zero_generator.cc
|
| index 69f68a0c2d5ff5eefa441cc27f8fe2547c317741..eddfaccdcce740cd24192e111efeb82209ac18a7 100644
|
| --- a/components/tracing/tools/proto_zero_plugin/proto_zero_generator.cc
|
| +++ b/components/tracing/tools/proto_zero_plugin/proto_zero_generator.cc
|
| @@ -58,6 +58,14 @@ class GeneratorJob {
|
| return error_.empty();
|
| }
|
|
|
| + void SetOption(const std::string& name, const std::string& value) {
|
| + if (name == "wrapper_namespace") {
|
| + wrapper_namespace_ = value;
|
| + } else {
|
| + Abort(std::string() + "Unknown plugin option '" + name + "'.");
|
| + }
|
| + }
|
| +
|
| // If generator fails to produce stubs for a particular proto definitions
|
| // it finishes with undefined output and writes the first error occured.
|
| const std::string& GetFirstError() const {
|
| @@ -194,9 +202,13 @@ class GeneratorJob {
|
| // Package name maps to a series of namespaces.
|
| package_ = source_->package();
|
| namespaces_ = Split(package_, ".");
|
| + if (!wrapper_namespace_.empty())
|
| + namespaces_.insert(namespaces_.begin(), wrapper_namespace_);
|
| +
|
| full_namespace_prefix_ = "::";
|
| for (const std::string& ns : namespaces_)
|
| full_namespace_prefix_ += ns + "::";
|
| +
|
| CollectDescriptors();
|
| CollectDependencies();
|
| }
|
| @@ -301,77 +313,84 @@ class GeneratorJob {
|
| setter["name"] = field->name();
|
| setter["action"] = field->is_repeated() ? "add" : "set";
|
|
|
| + if (field->is_repeated()) {
|
| + setter["dcheck"] = "";
|
| + } else {
|
| + setter["dcheck"] =
|
| + std::string(" DCheckSealField(") + setter["id"] + ");\n " ;
|
| + }
|
| +
|
| std::string appender;
|
| std::string cpp_type;
|
|
|
| switch (field->type()) {
|
| case FieldDescriptor::TYPE_BOOL: {
|
| - appender = "AppendBool";
|
| + appender = "AppendTinyVarInt";
|
| cpp_type = "bool";
|
| break;
|
| }
|
| case FieldDescriptor::TYPE_INT32: {
|
| - appender = "AppendInt32";
|
| + appender = "AppendVarInt";
|
| cpp_type = "int32_t";
|
| break;
|
| }
|
| case FieldDescriptor::TYPE_INT64: {
|
| - appender = "AppendInt64";
|
| + appender = "AppendVarInt";
|
| cpp_type = "int64_t";
|
| break;
|
| }
|
| case FieldDescriptor::TYPE_UINT32: {
|
| - appender = "AppendUint32";
|
| + appender = "AppendVarInt";
|
| cpp_type = "uint32_t";
|
| break;
|
| }
|
| case FieldDescriptor::TYPE_UINT64: {
|
| - appender = "AppendUint64";
|
| + appender = "AppendVarInt";
|
| cpp_type = "uint64_t";
|
| break;
|
| }
|
| case FieldDescriptor::TYPE_SINT32: {
|
| - appender = "AppendSint32";
|
| + appender = "AppendSignedVarInt";
|
| cpp_type = "int32_t";
|
| break;
|
| }
|
| case FieldDescriptor::TYPE_SINT64: {
|
| - appender = "AppendSint64";
|
| + appender = "AppendSignedVarInt";
|
| cpp_type = "int64_t";
|
| break;
|
| }
|
| case FieldDescriptor::TYPE_FIXED32: {
|
| - appender = "AppendFixed32";
|
| + appender = "AppendFixed";
|
| cpp_type = "uint32_t";
|
| break;
|
| }
|
| case FieldDescriptor::TYPE_FIXED64: {
|
| - appender = "AppendFixed64";
|
| + appender = "AppendFixed";
|
| cpp_type = "uint64_t";
|
| break;
|
| }
|
| case FieldDescriptor::TYPE_SFIXED32: {
|
| - appender = "AppendSfixed32";
|
| + appender = "AppendFixed";
|
| cpp_type = "int32_t";
|
| break;
|
| }
|
| case FieldDescriptor::TYPE_SFIXED64: {
|
| - appender = "AppendSfixed64";
|
| + appender = "AppendFixed";
|
| cpp_type = "int64_t";
|
| break;
|
| }
|
| case FieldDescriptor::TYPE_FLOAT: {
|
| - appender = "AppendFloat";
|
| + appender = "AppendFixed";
|
| cpp_type = "float";
|
| break;
|
| }
|
| case FieldDescriptor::TYPE_DOUBLE: {
|
| - appender = "AppendDouble";
|
| + appender = "AppendFixed";
|
| cpp_type = "double";
|
| break;
|
| }
|
| case FieldDescriptor::TYPE_ENUM: {
|
| - appender = IsTinyEnumField(field) ? "AppendTinyNumber" : "AppendInt32";
|
| + appender = IsTinyEnumField(field) ? "AppendTinyVarInt" : "AppendVarInt";
|
| cpp_type = GetCppClassName(field->enum_type(), true);
|
| break;
|
| }
|
| @@ -384,7 +403,7 @@ class GeneratorJob {
|
| stub_h_->Print(
|
| setter,
|
| "void $action$_$name$(const uint8_t* data, size_t size) {\n"
|
| - " // AppendBytes($id$, data, size);\n"
|
| + "$dcheck$ AppendBytes($id$, data, size);\n"
|
| "}\n");
|
| return;
|
| }
|
| @@ -398,7 +417,7 @@ class GeneratorJob {
|
| stub_h_->Print(
|
| setter,
|
| "void $action$_$name$($cpp_type$ value) {\n"
|
| - " // $appender$($id$, value);\n"
|
| + "$dcheck$ $appender$($id$, value);\n"
|
| "}\n");
|
| }
|
|
|
| @@ -519,6 +538,7 @@ class GeneratorJob {
|
| std::string error_;
|
|
|
| std::string package_;
|
| + std::string wrapper_namespace_;
|
| std::vector<std::string> namespaces_;
|
| std::string full_namespace_prefix_;
|
| std::vector<const Descriptor*> messages_;
|
| @@ -551,8 +571,14 @@ bool ProtoZeroGenerator::Generate(const FileDescriptor* file,
|
| // Variables are delimited by $.
|
| Printer stub_h_printer(stub_h_file_stream.get(), '$');
|
| Printer stub_cc_printer(stub_cc_file_stream.get(), '$');
|
| -
|
| GeneratorJob job(file, &stub_h_printer, &stub_cc_printer);
|
| +
|
| + // Parse additional options.
|
| + for (const std::string& option : Split(options, ",")) {
|
| + std::vector<std::string> option_pair = Split(option, "=");
|
| + job.SetOption(option_pair[0], option_pair[1]);
|
| + }
|
| +
|
| if (!job.GenerateStubs()) {
|
| *error = job.GetFirstError();
|
| return false;
|
|
|