summaryrefslogtreecommitdiff
path: root/tools/incident_section_gen/main.cpp
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2018-03-03 00:02:52 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-03-03 00:02:52 +0000
commit7d55509c199a624a5a4f7f0b4374edd1eb114d6f (patch)
tree8176eb170c56b20197d813cab0f561a7ac3a626a /tools/incident_section_gen/main.cpp
parent74564a43bf6ca32999641eb3fc947bb564651b3b (diff)
parentecf4bdb4477d5fcc469c1c4ea7418e16e71037b8 (diff)
Merge "Modifying proto csv output to include privacy levels."
Diffstat (limited to 'tools/incident_section_gen/main.cpp')
-rw-r--r--tools/incident_section_gen/main.cpp28
1 files changed, 24 insertions, 4 deletions
diff --git a/tools/incident_section_gen/main.cpp b/tools/incident_section_gen/main.cpp
index 9183918fcc63..e396a638927e 100644
--- a/tools/incident_section_gen/main.cpp
+++ b/tools/incident_section_gen/main.cpp
@@ -203,6 +203,18 @@ static inline Destination getFieldDest(const FieldDescriptor* field) {
getMessageDest(field->message_type(), fieldDest);
}
+// Converts Destination to a string.
+static inline string getDestString(const Destination dest) {
+ switch (dest) {
+ case DEST_AUTOMATIC: return "AUTOMATIC";
+ case DEST_LOCAL: return "LOCAL";
+ case DEST_EXPLICIT: return "EXPLICIT";
+ // UNSET is considered EXPLICIT by default.
+ case DEST_UNSET: return "EXPLICIT";
+ default: return "UNKNOWN";
+ }
+}
+
// Get Names ===========================================================================================
static inline string getFieldName(const FieldDescriptor* field) {
// replace . with double underscores to avoid name conflicts since fields use snake naming convention
@@ -218,7 +230,7 @@ static inline string getMessageName(const Descriptor* descriptor, const Destinat
// IsDefault ============================================================================================
// Returns true if a field is default. Default is defined as this field has same dest as its containing message.
-// For message fields, it only looks at its field tag and own default mesaage tag, doesn't recursively go deeper.
+// For message fields, it only looks at its field tag and own default message tag, doesn't recursively go deeper.
static inline bool isDefaultField(const FieldDescriptor* field, const Destination containerDest) {
Destination fieldDest = getFieldDest(field);
if (field->type() != FieldDescriptor::TYPE_MESSAGE) {
@@ -503,11 +515,12 @@ static string replace_string(const string& str, const char replace, const char w
return result;
}
-static void generateCsv(Descriptor const* descriptor, const string& indent, set<string>* parents) {
+static void generateCsv(Descriptor const* descriptor, const string& indent, set<string>* parents, const Destination containerDest = DEST_UNSET) {
DebugStringOptions options;
options.include_comments = true;
for (int i=0; i<descriptor->field_count(); i++) {
const FieldDescriptor* field = descriptor->field(i);
+ const Destination fieldDest = getFieldDest(field);
stringstream text;
if (field->type() == FieldDescriptor::TYPE_MESSAGE) {
text << field->message_type()->name();
@@ -515,11 +528,18 @@ static void generateCsv(Descriptor const* descriptor, const string& indent, set<
text << field->type_name();
}
text << " " << field->name();
+ text << " (PRIVACY=";
+ if (isDefaultField(field, containerDest)) {
+ text << getDestString(containerDest);
+ } else {
+ text << getDestString(fieldDest);
+ }
+ text << ")";
printf("%s%s,\n", indent.c_str(), replace_string(text.str(), '\n', ' ').c_str());
if (field->type() == FieldDescriptor::TYPE_MESSAGE &&
parents->find(field->message_type()->full_name()) == parents->end()) {
parents->insert(field->message_type()->full_name());
- generateCsv(field->message_type(), indent + ",", parents);
+ generateCsv(field->message_type(), indent + ",", parents, fieldDest);
parents->erase(field->message_type()->full_name());
}
}
@@ -548,7 +568,7 @@ int main(int argc, char const *argv[])
|| field->number() == sectionId) {
set<string> parents;
printf("%s\n", field->name().c_str());
- generateCsv(field->message_type(), "", &parents);
+ generateCsv(field->message_type(), "", &parents, getFieldDest(field));
break;
}
}