From: Bryan Duxbury Date: Tue, 23 Mar 2010 05:39:18 +0000 (+0000) Subject: THRIFT-701. java: Generated classes take up more space in jar than needed X-Git-Tag: 0.3.0~62 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=15b7b287947dd348e2801ead6b1a33b2a2d6b31b;p=common%2Fthrift.git THRIFT-701. java: Generated classes take up more space in jar than needed Use a static {} block instead of an anonymous inner class to define metaDataMap. This saves some space in jars generated by avoiding the internal class. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@926466 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 69bc6f93..c2479213 100644 --- a/compiler/cpp/src/generate/t_java_generator.cc +++ b/compiler/cpp/src/generate/t_java_generator.cc @@ -2007,14 +2007,17 @@ void t_java_generator::generate_java_meta_data_map(ofstream& out, vector::const_iterator f_iter; // Static Map with fieldID -> FieldMetaData mappings - indent(out) << "public static final Map<_Fields, FieldMetaData> metaDataMap = Collections.unmodifiableMap(new EnumMap<_Fields, FieldMetaData>(_Fields.class) {{" << endl; + indent(out) << "public static final Map<_Fields, FieldMetaData> metaDataMap;" << endl; + indent(out) << "static {" << endl; + indent_up(); + + indent(out) << "Map<_Fields, FieldMetaData> tmpMap = new EnumMap<_Fields, FieldMetaData>(_Fields.class);" << 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(_Fields." << constant_name(field_name) << ", new FieldMetaData(\"" << field_name << "\", "; + indent(out) << "tmpMap.put(_Fields." << constant_name(field_name) << ", new FieldMetaData(\"" << field_name << "\", "; // Set field requirement type (required, optional, etc.) if (field->get_req() == t_field::T_REQUIRED) { @@ -2029,12 +2032,9 @@ void t_java_generator::generate_java_meta_data_map(ofstream& out, generate_field_value_meta_data(out, field->get_type()); out << "));" << endl; } - indent_down(); - indent(out) << "}});" << endl << endl; - // Static initializer to populate global class to struct metadata map - indent(out) << "static {" << endl; - indent_up(); + indent(out) << "metaDataMap = Collections.unmodifiableMap(tmpMap);" << endl; + indent(out) << "FieldMetaData.addStructMetaDataMap(" << type_name(tstruct) << ".class, metaDataMap);" << endl; indent_down(); indent(out) << "}" << endl << endl;