summaryrefslogtreecommitdiff
path: root/tools/streaming_proto/cpp/main.cpp
diff options
context:
space:
mode:
authorYi Jin <jinyithu@google.com>2017-12-12 12:53:51 -0800
committerYi Jin <jinyithu@google.com>2017-12-12 13:20:46 -0800
commitf77a07df1cc71d1f25454de1b5c7da301541b837 (patch)
treec8d95c91cf7fe4c30b70eb494aec5c55cc72d54b /tools/streaming_proto/cpp/main.cpp
parentd04c00a47907452a76d31e7183e5cc37bdf4dbf3 (diff)
Create a new stream option which generates field name to id mapping
recursively for all its submessages. Also fix the wrong prefix for ro.build.version.XXX in proto. It is safe to adjust proto number for now since it is not used yet. Bug: 68774852 Test: atest incident_helper_test Change-Id: I46e43a407da6efc393eb3c39733aaf25a5cceb13
Diffstat (limited to 'tools/streaming_proto/cpp/main.cpp')
-rw-r--r--tools/streaming_proto/cpp/main.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/tools/streaming_proto/cpp/main.cpp b/tools/streaming_proto/cpp/main.cpp
index 477902065f99..745b3dc51181 100644
--- a/tools/streaming_proto/cpp/main.cpp
+++ b/tools/streaming_proto/cpp/main.cpp
@@ -85,11 +85,17 @@ should_generate_fields_mapping(const DescriptorProto& message)
return message.options().GetExtension(stream_msg).enable_fields_mapping();
}
+static inline bool
+should_generate_fields_mapping_recursively(const DescriptorProto& message) {
+ return message.options().GetExtension(stream_msg).enable_fields_mapping_recursively();
+}
+
static void
-write_message(stringstream& text, const DescriptorProto& message, const string& indent)
+write_message(stringstream& text, const DescriptorProto& message, const string& indent, bool genMapping)
{
int N;
const string indented = indent + INDENT;
+ genMapping |= should_generate_fields_mapping_recursively(message);
text << indent << "// message " << message.name() << endl;
text << indent << "namespace " << message.name() << " {" << endl;
@@ -103,7 +109,7 @@ write_message(stringstream& text, const DescriptorProto& message, const string&
// Nested classes
N = message.nested_type_size();
for (int i=0; i<N; i++) {
- write_message(text, message.nested_type(i), indented);
+ write_message(text, message.nested_type(i), indented, genMapping);
}
// Fields
@@ -112,7 +118,7 @@ write_message(stringstream& text, const DescriptorProto& message, const string&
write_field(text, message.field(i), indented);
}
- if (should_generate_fields_mapping(message)) {
+ if (genMapping | should_generate_fields_mapping(message)) {
N = message.field_size();
text << indented << "const int _FIELD_COUNT = " << N << ";" << endl;
text << indented << "const char* _FIELD_NAMES[" << N << "] = {" << endl;
@@ -161,7 +167,7 @@ write_header_file(CodeGeneratorResponse* response, const FileDescriptorProto& fi
N = file_descriptor.message_type_size();
for (size_t i=0; i<N; i++) {
- write_message(text, file_descriptor.message_type(i), "");
+ write_message(text, file_descriptor.message_type(i), "", false);
}
for (vector<string>::iterator it = namespaces.begin(); it != namespaces.end(); it++) {