THRIFT-119. java: structs' toString omits unset optional fields
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@700860 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 de9e2d2..c9baf68 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -1191,18 +1191,25 @@
out <<
indent() << "StringBuilder sb = new StringBuilder(\"" << tstruct->get_name() << "(\");" << endl;
+ out << indent() << "boolean first = true;" << endl << endl;
const vector<t_field*>& fields = tstruct->get_members();
vector<t_field*>::const_iterator f_iter;
- bool first = true;
for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- if (first) {
- first = false;
- indent(out) << "sb.append(\"" << (*f_iter)->get_name() << ":\");" << endl;
- } else {
- indent(out) << "sb.append(\"," << (*f_iter)->get_name() << ":\");" << endl;
+ if((*f_iter)->get_req() == t_field::T_OPTIONAL) {
+ indent(out) << "if (__isset." << (*f_iter)->get_name() << ") {" << endl;
+ indent_up();
}
+
+ indent(out) << "if (!first) sb.append(\", \");" << endl;
+ indent(out) << "sb.append(\"" << (*f_iter)->get_name() << ":\");" << endl;
indent(out) << "sb.append(this." << (*f_iter)->get_name() << ");" << endl;
+ indent(out) << "first = false;" << endl;
+
+ if((*f_iter)->get_req() == t_field::T_OPTIONAL) {
+ indent_down();
+ indent(out) << "}" << endl;
+ }
}
out <<
indent() << "sb.append(\")\");" << endl <<