Author: bryanduxbury
Date: Sat Apr  3 05:04:48 2010
New Revision: 930474

URL: http://svn.apache.org/viewvc?rev=930474&view=rev
Log:
THRIFT-663. java: JavaBean code generator produces incorrect setter methods

This patch causes the beans option to suppress the builder-style setter 
methods. It also adds a new 'private-members' option that leaves the 
builder-style methods, but makes the actual instance variables private.

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=930474&r1=930473&r2=930474&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 Sat 
Apr  3 05:04:48 2010
@@ -49,6 +49,9 @@ class t_java_generator : public t_oop_ge
     iter = parsed_options.find("beans");
     bean_style_ = (iter != parsed_options.end());
 
+    iter = parsed_options.find("private-members");
+    private_members_ = (iter != parsed_options.end());
+
     iter = parsed_options.find("nocamel");
     nocamel_style_ = (iter != parsed_options.end());
 
@@ -243,6 +246,7 @@ class t_java_generator : public t_oop_ge
   std::string package_dir_;
 
   bool bean_style_;
+  bool private_members_;
   bool nocamel_style_;
   bool gen_hash_code_;
 
@@ -1089,7 +1093,7 @@ void t_java_generator::generate_java_str
   out << endl;
 
   for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
-    if (bean_style_) {
+    if (bean_style_ || private_members_) {
       indent(out) << "private ";
     } else {
       generate_java_doc(out, *m_iter);
@@ -1865,13 +1869,20 @@ void t_java_generator::generate_java_bea
 
     // Simple setter
     generate_java_doc(out, field);
-    indent(out) << "public " << type_name(tstruct) << " set" << cap_name << 
"(" << type_name(type) <<
-      " " << field_name << ") {" << endl;
+    indent(out) << "public ";
+    if (bean_style_) {
+      out << "void";
+    } else {
+      out << type_name(tstruct);
+    }
+    out << " set" << cap_name << "(" << type_name(type) << " " << field_name 
<< ") {" << endl;
     indent_up();
     indent(out) << "this." << field_name << " = " << field_name << ";" <<
       endl;
     generate_isset_set(out, field);
-    indent(out) << "return this;" << endl;
+    if (!bean_style_) {
+      indent(out) << "return this;" << endl;
+    }
 
     indent_down();
     indent(out) << "}" << endl << endl;
@@ -3608,7 +3619,8 @@ bool t_java_generator::has_bit_vector(t_
 }
 
 THRIFT_REGISTER_GENERATOR(java, "Java",
-"    beans:           Generate bean-style output files.\n"
+"    beans:           Members will be private, and setter methods will return 
void.\n"
+"    private-members: Members will be private, but setter methods will return 
'this' like usual.\n"
 "    nocamel:         Do not use CamelCase field accessors with beans.\n"
 "    hashcode:        Generate quality hashCode methods.\n"
 );


Reply via email to