From 8684554e2947b7b0e6b38ebd4f5f80b0be83ddfe Mon Sep 17 00:00:00 2001 From: David Reiss Date: Wed, 1 Oct 2008 18:32:47 +0000 Subject: [PATCH] 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 --- compiler/cpp/src/generate/t_java_generator.cc | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc index de9e2d2c..c9baf686 100644 --- a/compiler/cpp/src/generate/t_java_generator.cc +++ b/compiler/cpp/src/generate/t_java_generator.cc @@ -1191,18 +1191,25 @@ void t_java_generator::generate_java_struct_tostring(ofstream& out, out << indent() << "StringBuilder sb = new StringBuilder(\"" << tstruct->get_name() << "(\");" << endl; + out << indent() << "boolean first = true;" << endl << endl; const vector& fields = tstruct->get_members(); vector::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 << -- 2.17.1