Commit a20e71ac authored by Edward's avatar Edward Committed by Wouter van Oortmerssen

has_method support for primitive fields in java runtime. Changed: idl.h,…

has_method support for primitive fields in java runtime. Changed: idl.h, FlatBufferBuilder.java ,  idl_gen_general.cpp, idl_parser.cpp, flatc.cpp (#5468)

* has_method support for primitive fields in java runtime

* adding the new flag to flatc

* addressing the review comments
parent acc9990a
......@@ -528,6 +528,7 @@ struct IDLOptions {
bool size_prefixed;
std::string root_type;
bool force_defaults;
bool java_primitive_has_method;
std::vector<std::string> cpp_includes;
// Possible options for the more general generator below.
......@@ -602,6 +603,7 @@ struct IDLOptions {
protobuf_ascii_alike(false),
size_prefixed(false),
force_defaults(false),
java_primitive_has_method(false),
lang(IDLOptions::kJava),
mini_reflect(IDLOptions::kNone),
lang_to_generate(0),
......@@ -927,6 +929,8 @@ class Parser : public ParserState {
extern std::string MakeCamel(const std::string &in, bool first = true);
extern std::string MakeScreamingCamel(const std::string &in);
// Generate text (JSON) from a given FlatBuffer, and a given Parser
// object that has been populated with the corresponding schema.
// If ident_step is 0, no indentation will be generated. Additionally,
......
......@@ -199,6 +199,17 @@ public class FlatBufferBuilder {
}
}
/**
* Helper function to test if a field is present in the table
*
* @param table Flatbuffer table
* @param offset virtual table offset
* @return true if the filed is present
*/
public static boolean isFieldPresent(Table table, int offset) {
return table.__offset(offset) != 0;
}
/**
* Reset the FlatBufferBuilder by purging all data that it holds.
*/
......
......@@ -319,6 +319,8 @@ int FlatCompiler::Compile(int argc, const char **argv) {
opts.force_defaults = true;
} else if (arg == "--force-empty") {
opts.set_empty_to_null = false;
} else if (arg == "--java-primitive-has-method") {
opts.java_primitive_has_method = true;
} else {
for (size_t i = 0; i < params_.num_generators; ++i) {
if (arg == params_.generators[i].generator_opt_long ||
......
......@@ -1323,6 +1323,15 @@ class GeneralGenerator : public BaseGenerator {
}
}
}
if (parser_.opts.java_primitive_has_method &&
IsScalar(field.value.type.base_type) && !struct_def.fixed) {
auto vt_offset_constant = " public static final int VT_" +
MakeScreamingCamel(field.name) + " = " +
NumToString(field.value.offset) + ";";
code += vt_offset_constant;
code += "\n";
}
}
code += "\n";
flatbuffers::FieldDef *key_field = nullptr;
......
......@@ -102,6 +102,18 @@ std::string MakeCamel(const std::string &in, bool first) {
return s;
}
// Convert an underscore_based_identifier in to screaming snake case.
std::string MakeScreamingCamel(const std::string &in) {
std::string s;
for (size_t i = 0; i < in.length(); i++) {
if (in[i] != '_')
s += static_cast<char>(toupper(in[i]));
else
s += in[i];
}
return s;
}
void DeserializeDoc( std::vector<std::string> &doc,
const Vector<Offset<String>> *documentation) {
if (documentation == nullptr) return;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment