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.
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@930474 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 bc2ac49..35f775b 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -49,6 +49,9 @@
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 @@
std::string package_dir_;
bool bean_style_;
+ bool private_members_;
bool nocamel_style_;
bool gen_hash_code_;
@@ -1089,7 +1093,7 @@
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 @@
// 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 @@
}
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"
);