THRIFT-674. java: Generated read() should just switch directly on field.id
This patch gets rid of an unnecessary map lookup and null check in generated structs' read method, amounting a noticeable performance improvement.
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@899721 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 28406d9..e2da877 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -1418,20 +1418,14 @@
"}" << endl;
// Switch statement on the field we are reading
- indent(out) << "_Fields fieldId = _Fields.findByThriftId(field.id);" << endl;
- indent(out) << "if (fieldId == null) {" << endl;
- indent(out) << " TProtocolUtil.skip(iprot, field.type);" << endl;
- indent(out) << "} else {" << endl;
- indent_up();
-
- indent(out) << "switch (fieldId) {" << endl;
+ indent(out) << "switch (field.id) {" << endl;
indent_up();
// Generate deserialization code for known cases
for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
indent(out) <<
- "case " << constant_name((*f_iter)->get_name()) << ":" << endl;
+ "case " << (*f_iter)->get_key() << ": // " << constant_name((*f_iter)->get_name()) << endl;
indent_up();
indent(out) <<
"if (field.type == " << type_to_enum((*f_iter)->get_type()) << ") {" << endl;
@@ -1448,6 +1442,9 @@
indent_down();
}
+ indent(out) << "default:" << endl;
+ indent(out) << " TProtocolUtil.skip(iprot, field.type);" << endl;
+
indent_down();
indent(out) << "}" << endl;
@@ -1455,8 +1452,6 @@
indent(out) <<
"iprot.readFieldEnd();" << endl;
- scope_down(out);
-
indent_down();
indent(out) << "}" << endl;