Fix vector of strings for Java
authorBob Potter <bobby.potter@gmail.com>
Sat, 9 Aug 2014 02:59:28 +0000 (21:59 -0500)
committerWouter van Oortmerssen <wvo@google.com>
Tue, 12 Aug 2014 22:12:51 +0000 (15:12 -0700)
Change-Id: If032b450230b15224b2661836c8a740398d207c5

java/flatbuffers/Table.java
src/idl_gen_java.cpp
tests/JavaTest.java
tests/MyGame/Example/Monster.java
tests/monsterdata_test.bin
tests/monsterdata_test.golden

index f2233fa..bfab3e0 100755 (executable)
@@ -41,7 +41,6 @@ public class Table {
 
   // Create a java String from UTF-8 data stored inside the flatbuffer.
   protected String __string(int offset) {
-    offset += bb_pos;
     offset += bb.getInt(offset);
     return new String(bb.array(), offset + SIZEOF_INT, bb.getInt(offset), Charset.forName("UTF-8"));
   }
index 4779a1c..6e751eb 100755 (executable)
@@ -247,7 +247,7 @@ static void GenStruct(StructDef &struct_def,
           }
           break;
         case BASE_TYPE_STRING:
-          code += offset_prefix + getter +"(o) : null";
+          code += offset_prefix + getter +"(o + bb_pos) : null";
           break;
         case BASE_TYPE_VECTOR: {
           auto vectortype = field.value.type.VectorType();
index dd6cbca..902362f 100755 (executable)
@@ -52,6 +52,8 @@ class JavaTest {
         // We set up the same values as monsterdata.json:
 
         int str = fbb.createString("MyMonster");
+        int test1 = fbb.createString("test1");
+        int test2 = fbb.createString("test2");
 
         Monster.startInventoryVector(fbb, 5);
         for (byte i = 4; i >=0; i--) fbb.addByte(i);
@@ -66,6 +68,11 @@ class JavaTest {
         Test.createTest(fbb, (short)30, (byte)40);
         int test4 = fbb.endVector();
 
+        Monster.startTestarrayofstringVector(fbb, 2);
+        fbb.addOffset(test2);
+        fbb.addOffset(test1);
+        int testArrayOfString = fbb.endVector();
+
         Monster.startMonster(fbb);
         Monster.addPos(fbb, Vec3.createVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0,
                                                  (byte)4, (short)5, (byte)6));
@@ -75,6 +82,7 @@ class JavaTest {
         Monster.addTestType(fbb, (byte)1);
         Monster.addTest(fbb, mon2);
         Monster.addTest4(fbb, test4);
+        Monster.addTestarrayofstring(fbb, testArrayOfString);
         int mon = Monster.endMonster(fbb);
 
         fbb.finish(mon);
@@ -135,6 +143,10 @@ class JavaTest {
         Test test_1 = monster.test4(1);
         TestEq(monster.test4Length(), 2);
         TestEq(test_0.a() + test_0.b() + test_1.a() + test_1.b(), 100);
+
+        TestEq(monster.testarrayofstringLength(), 2);
+        TestEq(monster.testarrayofstring(0),"test1");
+        TestEq(monster.testarrayofstring(1),"test2");
     }
 
     static <T> void TestEq(T a, T b) {
index a6c584a..a8ec2f9 100755 (executable)
@@ -14,7 +14,7 @@ public class Monster extends Table {
   public Vec3 pos(Vec3 obj) { int o = __offset(4); return o != 0 ? obj.__init(o + bb_pos, bb) : null; }
   public short mana() { int o = __offset(6); return o != 0 ? bb.getShort(o + bb_pos) : 150; }
   public short hp() { int o = __offset(8); return o != 0 ? bb.getShort(o + bb_pos) : 100; }
-  public String name() { int o = __offset(10); return o != 0 ? __string(o) : null; }
+  public String name() { int o = __offset(10); return o != 0 ? __string(o + bb_pos) : null; }
   public byte inventory(int j) { int o = __offset(14); return o != 0 ? bb.get(__vector(o) + j * 1) : 0; }
   public int inventoryLength() { int o = __offset(14); return o != 0 ? __vector_len(o) : 0; }
   public byte color() { int o = __offset(16); return o != 0 ? bb.get(o + bb_pos) : 8; }
index 6313745..952a96b 100644 (file)
Binary files a/tests/monsterdata_test.bin and b/tests/monsterdata_test.bin differ
index c905fe4..a738cae 100644 (file)
@@ -32,5 +32,9 @@
       a: 30,
       b: 40
     }
+  ],
+  testarrayofstring: [
+    "test1",
+    "test2"
   ]
 }