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 <<