diff --git a/src/idl_gen_general.cpp b/src/idl_gen_general.cpp index fa9bd1336..f0244c50a 100644 --- a/src/idl_gen_general.cpp +++ b/src/idl_gen_general.cpp @@ -422,7 +422,9 @@ static void GenStruct(const LanguageParameters &lang, const Parser &parser, code += "Length(" + offset_prefix; code += "__vector_len(o) : 0; }\n"; } - if ((field.value.type.base_type == BASE_TYPE_VECTOR || + // Generate a ByteBuffer accessor for strings & vectors of scalars. + if (((field.value.type.base_type == BASE_TYPE_VECTOR && + IsScalar(field.value.type.VectorType().base_type)) || field.value.type.base_type == BASE_TYPE_STRING) && lang.language == GeneratorOptions::kJava) { code += " public ByteBuffer "; diff --git a/tests/MyGame/Example/Monster.java b/tests/MyGame/Example/Monster.java index f7411d9d2..dad4d590d 100644 --- a/tests/MyGame/Example/Monster.java +++ b/tests/MyGame/Example/Monster.java @@ -27,16 +27,13 @@ public class Monster extends Table { public Test test4(int j) { return test4(new Test(), j); } public Test test4(Test obj, int j) { int o = __offset(22); return o != 0 ? obj.__init(__vector(o) + j * 4, bb) : null; } public int test4Length() { int o = __offset(22); return o != 0 ? __vector_len(o) : 0; } - public ByteBuffer test4AsByteBuffer() { return __vector_as_bytebuffer(22, 4); } public String testarrayofstring(int j) { int o = __offset(24); return o != 0 ? __string(__vector(o) + j * 4) : null; } public int testarrayofstringLength() { int o = __offset(24); return o != 0 ? __vector_len(o) : 0; } - public ByteBuffer testarrayofstringAsByteBuffer() { return __vector_as_bytebuffer(24, 4); } /// an example documentation comment: this will end up in the generated code /// multiline too public Monster testarrayoftables(int j) { return testarrayoftables(new Monster(), j); } public Monster testarrayoftables(Monster obj, int j) { int o = __offset(26); return o != 0 ? obj.__init(__indirect(__vector(o) + j * 4), bb) : null; } public int testarrayoftablesLength() { int o = __offset(26); return o != 0 ? __vector_len(o) : 0; } - public ByteBuffer testarrayoftablesAsByteBuffer() { return __vector_as_bytebuffer(26, 4); } public Monster enemy() { return enemy(new Monster()); } public Monster enemy(Monster obj) { int o = __offset(28); return o != 0 ? obj.__init(__indirect(o + bb_pos), bb) : null; } public byte testnestedflatbuffer(int j) { int o = __offset(30); return o != 0 ? bb.get(__vector(o) + j * 1) : 0; }