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;