From: David Reiss Date: Mon, 5 Jan 2009 21:02:52 +0000 (+0000) Subject: THRIFT-191. java: Create a static field id -> name map for each struct X-Git-Tag: 0.2.0~384 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=b936ffdbd1740fda3686cd71bdcb1f865b709d07;p=common%2Fthrift.git THRIFT-191. java: Create a static field id -> name map for each struct git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@731720 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc index 54d99a4b..ba7d639e 100644 --- a/compiler/cpp/src/generate/t_java_generator.cc +++ b/compiler/cpp/src/generate/t_java_generator.cc @@ -78,6 +78,7 @@ class t_java_generator : public t_oop_generator { void generate_java_struct_result_writer(std::ofstream& out, t_struct* tstruct); void generate_java_struct_writer(std::ofstream& out, t_struct* tstruct); void generate_java_struct_tostring(std::ofstream& out, t_struct* tstruct); + void generate_java_meta_data_map(std::ofstream& out, t_struct* tstruct); void generate_reflection_setters(std::ostringstream& out, t_type* type, std::string field_name, std::string cap_name); void generate_reflection_getters(std::ostringstream& out, t_type* type, std::string field_name, std::string cap_name); void generate_generic_field_getters_setters(std::ofstream& out, t_struct* tstruct); @@ -250,6 +251,7 @@ string t_java_generator::java_type_imports() { "import java.util.HashMap;\n" + "import java.util.Set;\n" + "import java.util.HashSet;\n" + + "import java.util.Collections;\n" + hash_builder + "import com.facebook.thrift.*;\n\n"; } @@ -613,6 +615,8 @@ void t_java_generator::generate_java_struct_definition(ofstream &out, endl; } + generate_java_meta_data_map(out, tstruct); + // Default constructor indent(out) << "public " << tstruct->get_name() << "() {" << endl; @@ -1421,6 +1425,31 @@ void t_java_generator::generate_java_struct_tostring(ofstream& out, endl; } +/** + * Generates a static map with meta data to store information such as fieldID to + * fieldName mapping + * + * @param tstruct The struct definition + */ +void t_java_generator::generate_java_meta_data_map(ofstream& out, + t_struct* tstruct) { + const vector& fields = tstruct->get_members(); + vector::const_iterator f_iter; + + // Static Map with fieldID -> FieldMetaData mappings + indent(out) << "public static final Map metaDataMap = Collections.unmodifiableMap(new HashMap() {{" << endl; + + // Populate map + indent_up(); + for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) { + t_field* field = *f_iter; + std::string field_name = field->get_name(); + indent(out) << "put(" << upcase_string(field_name) << ", new FieldMetaData(\"" << field_name << "\"));" << endl; + } + indent_down(); + indent(out) << "}});" << endl << endl; +} + /** * Generates a thrift service. In C++, this comprises an entirely separate diff --git a/lib/java/src/com/facebook/thrift/FieldMetaData.java b/lib/java/src/com/facebook/thrift/FieldMetaData.java new file mode 100644 index 00000000..de530d64 --- /dev/null +++ b/lib/java/src/com/facebook/thrift/FieldMetaData.java @@ -0,0 +1,8 @@ +package com.facebook.thrift; + +public class FieldMetaData implements java.io.Serializable { + public final String fieldName; + public FieldMetaData(String fieldName){ + this.fieldName = fieldName; + } +}