Author: dreiss
Date: Wed Oct 1 11:32:47 2008
New Revision: 700860
URL: http://svn.apache.org/viewvc?rev=700860&view=rev
Log:
THRIFT-119. java: structs' toString omits unset optional fields
Modified:
incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
Modified: incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
URL:
http://svn.apache.org/viewvc/incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc?rev=700860&r1=700859&r2=700860&view=diff
==============================================================================
--- incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
(original)
+++ incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc Wed
Oct 1 11:32:47 2008
@@ -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 <<