Fail if there are repeated fields in atoms.proto

Repeated fields arent allowed outside of attribution node and key value
pairs, so we should fail to build if someone attempts to add one.

Bug: 149956370
Test: atest stats-log-api-gen-test
Change-Id: I0caa6fcf74dabe8e962360ecccfd3a87fcaa4909
Merged-In: I0caa6fcf74dabe8e962360ecccfd3a87fcaa4909
This commit is contained in:
Tej Singh
2020-02-20 18:14:50 -08:00
committed by Muhammad Qureshi
parent 13805decc7
commit c88fbf1e1c
3 changed files with 28 additions and 18 deletions

View File

@@ -237,6 +237,16 @@ int collate_atom(const Descriptor *atom, AtomDecl *atomDecl,
errorCount++;
continue;
}
if (field->is_repeated() &&
!(javaType == JAVA_TYPE_ATTRIBUTION_CHAIN || javaType == JAVA_TYPE_KEY_VALUE_PAIR)) {
print_error(field,
"Repeated fields are not supported in atoms. Please make field %s not "
"repeated.\n",
field->name().c_str());
errorCount++;
continue;
}
}
// Check that if there's an attribution chain, it's at position 1.

View File

@@ -41,21 +41,20 @@ enum AnEnum {
message AllTypesAtom {
repeated android.os.statsd.AttributionNode attribution_chain = 1;
optional double double_field = 2;
optional float float_field = 3;
optional int64 int64_field = 4;
optional uint64 uint64_field = 5;
optional int32 int32_field = 6;
optional fixed64 fixed64_field = 7;
optional fixed32 fixed32_field = 8;
optional bool bool_field = 9;
optional string string_field = 10;
optional uint32 uint32_field = 11;
optional AnEnum enum_field = 12;
optional sfixed32 sfixed32_field = 13;
optional sfixed64 sfixed64_field = 14;
optional sint32 sint32_field = 15;
optional sint64 sint64_field = 16;
optional float float_field = 2;
optional int64 int64_field = 3;
optional uint64 uint64_field = 4;
optional int32 int32_field = 5;
optional fixed64 fixed64_field = 6;
optional fixed32 fixed32_field = 7;
optional bool bool_field = 8;
optional string string_field = 9;
optional uint32 uint32_field = 10;
optional AnEnum enum_field = 11;
optional sfixed32 sfixed32_field = 12;
optional sfixed64 sfixed64_field = 13;
optional sint32 sint32_field = 14;
optional sint64 sint64_field = 15;
}
message Event {
@@ -70,6 +69,8 @@ message Event {
message BadTypesAtom {
optional IntAtom bad_int_atom = 1;
optional bytes bad_bytes = 2;
repeated int32 repeated_field = 3;
optional double double_field = 4;
}
message BadTypesEvent {

View File

@@ -98,7 +98,6 @@ TEST(CollationTest, CollateStats) {
EXPECT_SET_CONTAINS_SIGNATURE(
atoms.signatures_to_modules,
JAVA_TYPE_ATTRIBUTION_CHAIN, // AttributionChain
JAVA_TYPE_DOUBLE, // double
JAVA_TYPE_FLOAT, // float
JAVA_TYPE_LONG, // int64
JAVA_TYPE_LONG, // uint64
@@ -157,13 +156,13 @@ TEST(CollationTest, NonMessageTypeFails) {
}
/**
* Test that atoms that have non-primitive types are rejected.
* Test that atoms that have non-primitive types or repeated fields are rejected.
*/
TEST(CollationTest, FailOnBadTypes) {
Atoms atoms;
int errorCount = collate_atoms(BadTypesEvent::descriptor(), &atoms);
EXPECT_EQ(2, errorCount);
EXPECT_EQ(4, errorCount);
}
/**