Merge patch from Dan Engeleman for Java utility constructors
Summary: As well as a packaging fix
Reviewed By: aditya
Test Plan: Generate test files, look at Java obj constructors
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665231 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 808d7ec..c138df3 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -400,6 +400,34 @@
indent_down();
indent(out) << "}" << endl << endl;
+
+ // Full constructor for all fields
+ if (!members.empty()) {
+ 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;
+ }
+ }
+ out << ")" << endl;
+ indent_down();
+ indent(out) << "{" << endl;
+ 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;
+ }
+ indent_down();
+ indent(out) << "}" << endl << endl;
+ }
+
+
generate_java_struct_reader(out, tstruct);
if (is_result) {
generate_java_struct_result_writer(out, tstruct);
@@ -1137,7 +1165,7 @@
indent_down();
f_service_ << indent() << "}";
for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
- f_service_ << " catch (" << (*x_iter)->get_type()->get_name() << " " << (*x_iter)->get_name() << ") {" << endl;
+ f_service_ << " catch (" << type_name((*x_iter)->get_type(), false, false) << " " << (*x_iter)->get_name() << ") {" << endl;
if (!tfunction->is_async()) {
indent_up();
f_service_ <<
@@ -1739,7 +1767,7 @@
const std::vector<t_field*>& xceptions = xs->get_members();
vector<t_field*>::const_iterator x_iter;
for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
- result += (*x_iter)->get_type()->get_name() + ", ";
+ result += type_name((*x_iter)->get_type(), false, false) + ", ";
}
result += "TException";
return result;