THRIFT-2304 cpp:Move client assignments from construtor in method
Patch: Martin Vogt
diff --git a/compiler/cpp/src/generate/t_cpp_generator.cc b/compiler/cpp/src/generate/t_cpp_generator.cc
index 333fe60..7f23f9b 100644
--- a/compiler/cpp/src/generate/t_cpp_generator.cc
+++ b/compiler/cpp/src/generate/t_cpp_generator.cc
@@ -2254,16 +2254,15 @@
   if (style != "Cob") {
     f_header_ <<
       indent() << service_name_ << style << "Client" << short_suffix <<
-      "(" << prot_ptr << " prot) :" <<
-      endl;
+      "(" << prot_ptr << " prot) ";
+
     if (extends.empty()) {
+      f_header_ <<  "{" << endl;
       f_header_ <<
-        indent() << "  piprot_(prot)," << endl <<
-        indent() << "  poprot_(prot) {" << endl <<
-        indent() << "  iprot_ = prot.get();" << endl <<
-        indent() << "  oprot_ = prot.get();" << endl <<
+      indent() << "  setProtocol(prot);" << endl <<
         indent() << "}" << endl;
     } else {
+      f_header_ <<  ":" << endl;
       f_header_ <<
         indent() << "  " << extends << style << client_suffix <<
         "(prot, prot) {}" << endl;
@@ -2271,20 +2270,43 @@
 
     f_header_ <<
       indent() << service_name_ << style << "Client" << short_suffix <<
-      "(" << prot_ptr << " iprot, " << prot_ptr << " oprot) :" << endl;
+      "(" << prot_ptr << " iprot, " << prot_ptr << " oprot) ";
     if (extends.empty()) {
+      f_header_ <<  "{" << endl;
       f_header_ <<
-        indent() << "  piprot_(iprot)," << endl <<
-        indent() << "  poprot_(oprot) {" << endl <<
-        indent() << "  iprot_ = iprot.get();" << endl <<
-        indent() << "  oprot_ = oprot.get();" << endl <<
+      indent() << "  setProtocol(iprot,oprot);" << endl <<
         indent() << "}" << endl;
     } else {
-      f_header_ <<
+      f_header_ << ":" <<
         indent() << "  " << extends << style << client_suffix <<
         "(iprot, oprot) {}" << endl;
     }
 
+    // create the setProtocol methods
+    if (extends.empty()) {
+      f_header_ << " private:"<<endl;
+      // 1: one parameter
+      f_header_ <<
+      indent() << "void setProtocol" << short_suffix << "("
+        << prot_ptr << " prot) {" <<endl;
+      f_header_ << indent() << "setProtocol(prot,prot);"<<endl;
+      f_header_ << indent() << "}"<<endl;
+      // 2: two parameter
+      f_header_ <<
+      indent() << "void setProtocol" << short_suffix <<
+      "(" << prot_ptr << " iprot, " << prot_ptr << " oprot) {"<<endl;
+
+      f_header_ <<
+      indent() << "  piprot_=iprot;"<<endl <<
+      indent() << "  poprot_=oprot;"<<endl <<
+      indent() << "  iprot_ = iprot.get();"<<endl <<
+      indent() << "  oprot_ = oprot.get();"<<endl;
+
+      f_header_ << indent() << "}"<<endl;
+      f_header_ << " public:"<<endl;
+    }
+
+
     // Generate getters for the protocols.
     // Note that these are not currently templated for simplicity.
     // TODO(simpkins): should they be templated?