allow use of atom definition outside of atoms.proto in pulled atoms

There will be followup cls to add support of new types that can be
nested and repeated.
+ skip StatsLog.write signature generation for pulled atoms.

Bug: 113872139
Test: manual test
Change-Id: I69d0ee0b2fe8e286e48eac20ec2c8b280c477bf0
diff --git a/tools/stats_log_api_gen/Collation.cpp b/tools/stats_log_api_gen/Collation.cpp
index f294728..4245700 100644
--- a/tools/stats_log_api_gen/Collation.cpp
+++ b/tools/stats_log_api_gen/Collation.cpp
@@ -195,9 +195,11 @@
       print_error(field, "Unkown type for field: %s\n", field->name().c_str());
       errorCount++;
       continue;
-    } else if (javaType == JAVA_TYPE_OBJECT) {
+    } else if (javaType == JAVA_TYPE_OBJECT &&
+               atomDecl->code < PULL_ATOM_START_ID) {
       // Allow attribution chain, but only at position 1.
-      print_error(field, "Message type not allowed for field: %s\n",
+      print_error(field,
+                  "Message type not allowed for field in pushed atoms: %s\n",
                   field->name().c_str());
       errorCount++;
       continue;
@@ -233,12 +235,19 @@
     java_type_t javaType = java_type(field);
 
     AtomField atField(field->name(), javaType);
+    // Generate signature for pushed atoms
+    if (atomDecl->code < PULL_ATOM_START_ID) {
+      if (javaType == JAVA_TYPE_ENUM) {
+        // All enums are treated as ints when it comes to function signatures.
+        signature->push_back(JAVA_TYPE_INT);
+        collate_enums(*field->enum_type(), &atField);
+      } else {
+        signature->push_back(javaType);
+      }
+    }
     if (javaType == JAVA_TYPE_ENUM) {
       // All enums are treated as ints when it comes to function signatures.
-      signature->push_back(JAVA_TYPE_INT);
       collate_enums(*field->enum_type(), &atField);
-    } else {
-      signature->push_back(javaType);
     }
     atomDecl->fields.push_back(atField);