From: Bryan Duxbury Date: Sun, 4 Apr 2010 04:01:07 +0000 (+0000) Subject: THRIFT-753. java: Don't look up TFieldIdEnum values with a map X-Git-Tag: 0.3.0~41 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=49b38015a672613c83d7c7a2954a9eb331b59a5a;p=common%2Fthrift.git THRIFT-753. java: Don't look up TFieldIdEnum values with a map Instead of using a generated map, use a big switch statement. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@930618 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 5c38c5da..cda35037 100644 --- a/compiler/cpp/src/generate/t_java_generator.cc +++ b/compiler/cpp/src/generate/t_java_generator.cc @@ -3566,13 +3566,11 @@ void t_java_generator::generate_field_name_constants(ofstream& out, t_struct* ts out << ";" << endl << endl; - indent(out) << "private static final Map byId = new HashMap();" << endl; indent(out) << "private static final Map byName = new HashMap();" << endl; out << endl; indent(out) << "static {" << endl; indent(out) << " for (_Fields field : EnumSet.allOf(_Fields.class)) {" << endl; - indent(out) << " byId.put((int)field._thriftId, field);" << endl; indent(out) << " byName.put(field.getFieldName(), field);" << endl; indent(out) << " }" << endl; indent(out) << "}" << endl << endl; @@ -3581,7 +3579,22 @@ void t_java_generator::generate_field_name_constants(ofstream& out, t_struct* ts indent(out) << " * Find the _Fields constant that matches fieldId, or null if its not found." << endl; indent(out) << " */" << endl; indent(out) << "public static _Fields findByThriftId(int fieldId) {" << endl; - indent(out) << " return byId.get(fieldId);" << endl; + indent_up(); + indent(out) << "switch(fieldId) {" << endl; + indent_up(); + + for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) { + indent(out) << "case " << (*m_iter)->get_key() << ": // " << constant_name((*m_iter)->get_name()) << endl; + indent(out) << " return " << constant_name((*m_iter)->get_name()) << ";" << endl; + } + + indent(out) << "default:" << endl; + indent(out) << " return null;" << endl; + + indent_down(); + indent(out) << "}" << endl; + + indent_down(); indent(out) << "}" << endl << endl; indent(out) << "/**" << endl;