Made sure GetRootAs..() functions are generated for all Java tables.
authorWouter van Oortmerssen <wvo@google.com>
Wed, 3 Sep 2014 22:34:40 +0000 (15:34 -0700)
committerWouter van Oortmerssen <wvo@google.com>
Wed, 3 Sep 2014 22:34:40 +0000 (15:34 -0700)
Previously they were only generated for the root_type, making it
impossible to use the other types in the file as the root of a buffer.

Bug: 17206174
Change-Id: Ie71bed42ac3b22dcceae6385cbd5846c37e5f1b8
Tested: on Linux

src/idl_gen_java.cpp

index 3009d4b..7c57ffb 100755 (executable)
@@ -154,9 +154,7 @@ static void GenStructBody(const StructDef &struct_def, std::string *code_ptr,
   }
 }
 
-static void GenStruct(StructDef &struct_def,
-                      std::string *code_ptr,
-                      StructDef *root_struct_def) {
+static void GenStruct(StructDef &struct_def, std::string *code_ptr) {
   if (struct_def.generated) return;
   std::string &code = *code_ptr;
 
@@ -170,9 +168,9 @@ static void GenStruct(StructDef &struct_def,
   code += "public class " + struct_def.name + " extends ";
   code += struct_def.fixed ? "Struct" : "Table";
   code += " {\n";
-  if (&struct_def == root_struct_def) {
-    // Generate a special accessor for the table that has been declared as
-    // the root type.
+  if (!struct_def.fixed) {
+    // Generate a special accessor for the table that when used as the root
+    // of a FlatBuffer
     code += "  public static " + struct_def.name + " getRootAs";
     code += struct_def.name;
     code += "(ByteBuffer _bb, int offset) { ";
@@ -377,7 +375,7 @@ bool GenerateJava(const Parser &parser,
   for (auto it = parser.structs_.vec.begin();
        it != parser.structs_.vec.end(); ++it) {
     std::string declcode;
-    GenStruct(**it, &declcode, parser.root_struct_def);
+    GenStruct(**it, &declcode);
     if (!SaveClass(parser, **it, declcode, path, true))
       return false;
   }