Author: bryanduxbury
Date: Fri Oct  2 00:56:53 2009
New Revision: 820857

URL: http://svn.apache.org/viewvc?rev=820857&view=rev
Log:
THRIFT-529. java: Change generated constructors so that application code 
evolves better
Optional fields are now excluded from constructors.

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=820857&r1=820856&r2=820857&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 Fri 
Oct  2 00:56:53 2009
@@ -1068,6 +1068,8 @@
 
   generate_java_meta_data_map(out, tstruct);
 
+  bool all_optional_members = true;
+
   // Default constructor
   indent(out) <<
     "public " << tstruct->get_name() << "() {" << endl;
@@ -1077,22 +1079,27 @@
     if ((*m_iter)->get_value() != NULL) {
       print_const_value(out, "this." + (*m_iter)->get_name(), t, 
(*m_iter)->get_value(), true, true);
     }
+    if ((*m_iter)->get_req() != t_field::T_OPTIONAL) {
+      all_optional_members = false;
+    }
   }
   indent_down();
   indent(out) << "}" << endl << endl;
 
-
-  if (!members.empty()) {
+  if (!members.empty() && !all_optional_members) {
     // Full constructor for all fields
     indent(out) <<
       "public " << tstruct->get_name() << "(" << endl;
     indent_up();
-    for (m_iter = members.begin(); m_iter != members.end(); ) {
-      indent(out) << type_name((*m_iter)->get_type()) << " " <<
-        (*m_iter)->get_name();
-      ++m_iter;
-      if (m_iter != members.end()) {
-        out << "," << endl;
+    bool first = true;
+    for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
+      if ((*m_iter)->get_req() != t_field::T_OPTIONAL) {
+        if (!first) {
+          out << "," << endl;
+        }
+        first = false;
+        indent(out) << type_name((*m_iter)->get_type()) << " " <<
+          (*m_iter)->get_name();
       }
     }
     out << ")" << endl;
@@ -1101,9 +1108,11 @@
     indent_up();
     indent(out) << "this();" << endl;
     for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
-      indent(out) << "this." << (*m_iter)->get_name() << " = " <<
-        (*m_iter)->get_name() << ";" << endl;
-      generate_isset_set(out, (*m_iter));
+      if ((*m_iter)->get_req() != t_field::T_OPTIONAL) {
+        indent(out) << "this." << (*m_iter)->get_name() << " = " <<
+          (*m_iter)->get_name() << ";" << endl;
+        generate_isset_set(out, (*m_iter));
+      }
     }
     indent_down();
     indent(out) << "}" << endl << endl;


Reply via email to