|  | @@ -59,21 +59,21 @@ index 6fd15d2..7de1fad 100755
 | 
	
		
			
				|  |  |  2.8.0.rc3.226.g39d4020
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -From e724d3abf096278615085bd58217321e32b43fd8 Mon Sep 17 00:00:00 2001
 | 
	
		
			
				|  |  | +From 387e4300bc9d98176a92a7c010621443a538e7f2 Mon Sep 17 00:00:00 2001
 | 
	
		
			
				|  |  |  From: chedeti <chedeti@google.com>
 | 
	
		
			
				|  |  |  Date: Sun, 31 Jul 2016 16:16:40 -0700
 | 
	
		
			
				|  |  |  Subject: [PATCH 2/3] grpc cpp plugins generator with example
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  ---
 | 
	
		
			
				|  |  | - compiler/cpp/src/generate/t_cpp_generator.cc | 478 +++++++++++++++++++++++----
 | 
	
		
			
				|  |  | + compiler/cpp/src/generate/t_cpp_generator.cc | 489 +++++++++++++++++++++++----
 | 
	
		
			
				|  |  |   tutorial/cpp/CMakeLists.txt                  |  53 ---
 | 
	
		
			
				|  |  |   tutorial/cpp/CppClient.cpp                   |  80 -----
 | 
	
		
			
				|  |  |   tutorial/cpp/CppServer.cpp                   | 181 ----------
 | 
	
		
			
				|  |  | - tutorial/cpp/GriftClient.cpp                 |  93 ++++++
 | 
	
		
			
				|  |  | - tutorial/cpp/GriftServer.cpp                 |  93 ++++++
 | 
	
		
			
				|  |  | + tutorial/cpp/GriftClient.cpp                 |  93 +++++
 | 
	
		
			
				|  |  | + tutorial/cpp/GriftServer.cpp                 |  93 +++++
 | 
	
		
			
				|  |  |   tutorial/cpp/Makefile.am                     |  66 ++--
 | 
	
		
			
				|  |  |   tutorial/cpp/test.thrift                     |  13 +
 | 
	
		
			
				|  |  | - 8 files changed, 641 insertions(+), 416 deletions(-)
 | 
	
		
			
				|  |  | + 8 files changed, 652 insertions(+), 416 deletions(-)
 | 
	
		
			
				|  |  |   delete mode 100644 tutorial/cpp/CMakeLists.txt
 | 
	
		
			
				|  |  |   delete mode 100644 tutorial/cpp/CppClient.cpp
 | 
	
		
			
				|  |  |   delete mode 100644 tutorial/cpp/CppServer.cpp
 | 
	
	
		
			
				|  | @@ -82,7 +82,7 @@ Subject: [PATCH 2/3] grpc cpp plugins generator with example
 | 
	
		
			
				|  |  |   create mode 100644 tutorial/cpp/test.thrift
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  diff --git a/compiler/cpp/src/generate/t_cpp_generator.cc b/compiler/cpp/src/generate/t_cpp_generator.cc
 | 
	
		
			
				|  |  | -index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  | +index 6c04899..1557241 100644
 | 
	
		
			
				|  |  |  --- a/compiler/cpp/src/generate/t_cpp_generator.cc
 | 
	
		
			
				|  |  |  +++ b/compiler/cpp/src/generate/t_cpp_generator.cc
 | 
	
		
			
				|  |  |  @@ -162,6 +162,8 @@ public:
 | 
	
	
		
			
				|  | @@ -328,7 +328,7 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |                      << endl;
 | 
	
		
			
				|  |  |   
 | 
	
		
			
				|  |  |       f_service_tcc_ << "#ifndef " << svcname << "_TCC" << endl << "#define " << svcname << "_TCC"
 | 
	
		
			
				|  |  | -@@ -1663,19 +1704,66 @@ void t_cpp_generator::generate_service(t_service* tservice) {
 | 
	
		
			
				|  |  | +@@ -1663,19 +1704,69 @@ void t_cpp_generator::generate_service(t_service* tservice) {
 | 
	
		
			
				|  |  |       }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  |   
 | 
	
	
		
			
				|  | @@ -361,15 +361,18 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |  +      indent() << "\"/" << ns << "." << service_name_ << "/" << (*f_iter)->get_name() << "\"," << endl;
 | 
	
		
			
				|  |  |  +  }
 | 
	
		
			
				|  |  |  +
 | 
	
		
			
				|  |  | -+  if (extends_service) {
 | 
	
		
			
				|  |  | -+    vector<t_function*> functions = extends_service->get_functions();
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++  t_service* service_iter = extends_service;  
 | 
	
		
			
				|  |  | ++  while (service_iter) {
 | 
	
		
			
				|  |  | ++    vector<t_function*> functions = service_iter->get_functions();
 | 
	
		
			
				|  |  |  +    vector<t_function*>::iterator f_iter;
 | 
	
		
			
				|  |  |  +
 | 
	
		
			
				|  |  |  +    for ( f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
 | 
	
		
			
				|  |  |  +      f_service_ <<
 | 
	
		
			
				|  |  | -+      indent() << "\"/" << extends_service->get_program()->get_namespace("cpp") <<
 | 
	
		
			
				|  |  | -+      "." << extends_service->get_name() << "/" << (*f_iter)->get_name() << "\"," << endl;
 | 
	
		
			
				|  |  | ++      indent() << "\"/" << service_iter->get_program()->get_namespace("cpp") <<
 | 
	
		
			
				|  |  | ++      "." << service_iter->get_name() << "/" << (*f_iter)->get_name() << "\"," << endl;
 | 
	
		
			
				|  |  |  +    }
 | 
	
		
			
				|  |  | ++    service_iter = service_iter->get_extends();
 | 
	
		
			
				|  |  |  +  }
 | 
	
		
			
				|  |  |  +
 | 
	
		
			
				|  |  |  +  indent_down();
 | 
	
	
		
			
				|  | @@ -403,7 +406,7 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |   
 | 
	
		
			
				|  |  |     // Generate all the cob components
 | 
	
		
			
				|  |  |     if (gen_cob_style_) {
 | 
	
		
			
				|  |  | -@@ -1688,10 +1776,14 @@ void t_cpp_generator::generate_service(t_service* tservice) {
 | 
	
		
			
				|  |  | +@@ -1688,10 +1779,14 @@ void t_cpp_generator::generate_service(t_service* tservice) {
 | 
	
		
			
				|  |  |       generate_service_async_skeleton(tservice);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  |   
 | 
	
	
		
			
				|  | @@ -418,7 +421,7 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |     // Close the namespace
 | 
	
		
			
				|  |  |     f_service_ << ns_close_ << endl << endl;
 | 
	
		
			
				|  |  |     f_service_tcc_ << ns_close_ << endl << endl;
 | 
	
		
			
				|  |  | -@@ -1729,15 +1821,11 @@ void t_cpp_generator::generate_service_helpers(t_service* tservice) {
 | 
	
		
			
				|  |  | +@@ -1729,15 +1824,11 @@ void t_cpp_generator::generate_service_helpers(t_service* tservice) {
 | 
	
		
			
				|  |  |       string name_orig = ts->get_name();
 | 
	
		
			
				|  |  |   
 | 
	
		
			
				|  |  |       // TODO(dreiss): Why is this stuff not in generate_function_helpers?
 | 
	
	
		
			
				|  | @@ -436,7 +439,7 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |       ts->set_name(name_orig);
 | 
	
		
			
				|  |  |   
 | 
	
		
			
				|  |  |       generate_function_helpers(tservice, *f_iter);
 | 
	
		
			
				|  |  | -@@ -1745,13 +1833,210 @@ void t_cpp_generator::generate_service_helpers(t_service* tservice) {
 | 
	
		
			
				|  |  | +@@ -1745,13 +1836,218 @@ void t_cpp_generator::generate_service_helpers(t_service* tservice) {
 | 
	
		
			
				|  |  |   }
 | 
	
		
			
				|  |  |   
 | 
	
		
			
				|  |  |   /**
 | 
	
	
		
			
				|  | @@ -497,9 +500,10 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |  +    }
 | 
	
		
			
				|  |  |  +
 | 
	
		
			
				|  |  |  +    t_service* extends_service = tservice->get_extends();
 | 
	
		
			
				|  |  | -+    if (extends_service) {
 | 
	
		
			
				|  |  | ++    t_service* service_iter = extends_service;
 | 
	
		
			
				|  |  | ++    while (service_iter) {
 | 
	
		
			
				|  |  |  +      // generate inherited methods
 | 
	
		
			
				|  |  | -+      vector<t_function*> functions = extends_service->get_functions();
 | 
	
		
			
				|  |  | ++      vector<t_function*> functions = service_iter->get_functions();
 | 
	
		
			
				|  |  |  +      vector<t_function*>::iterator f_iter;
 | 
	
		
			
				|  |  |  +      for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
 | 
	
		
			
				|  |  |  +        string function_name = (*f_iter)->get_name();
 | 
	
	
		
			
				|  | @@ -508,6 +512,7 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |  +          "(::grpc::ClientContext* context, const " << function_name <<
 | 
	
		
			
				|  |  |  +          "Req& request, " << function_name << "Resp* response) override;" << endl;
 | 
	
		
			
				|  |  |  +      }
 | 
	
		
			
				|  |  | ++      service_iter = service_iter->get_extends();
 | 
	
		
			
				|  |  |  +    }
 | 
	
		
			
				|  |  |  +
 | 
	
		
			
				|  |  |  +    f_header_ <<
 | 
	
	
		
			
				|  | @@ -521,14 +526,16 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |  +        indent() << "const ::grpc::RpcMethod rpcmethod_" << (*f_iter)->get_name() << "_;" << endl;
 | 
	
		
			
				|  |  |  +    }
 | 
	
		
			
				|  |  |  +
 | 
	
		
			
				|  |  | -+    if (extends_service) {
 | 
	
		
			
				|  |  | ++    service_iter = extends_service;
 | 
	
		
			
				|  |  | ++    while (service_iter) {
 | 
	
		
			
				|  |  |  +      // generate inherited methods
 | 
	
		
			
				|  |  | -+      vector<t_function*> functions = extends_service->get_functions();
 | 
	
		
			
				|  |  | ++      vector<t_function*> functions = service_iter->get_functions();
 | 
	
		
			
				|  |  |  +      vector<t_function*>::iterator f_iter;
 | 
	
		
			
				|  |  |  +      for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
 | 
	
		
			
				|  |  |  +        f_header_ <<
 | 
	
		
			
				|  |  |  +          indent() << "const ::grpc::RpcMethod rpcmethod_" << (*f_iter)->get_name() << "_;" << endl;
 | 
	
		
			
				|  |  |  +      }
 | 
	
		
			
				|  |  | ++      service_iter = service_iter->get_extends();
 | 
	
		
			
				|  |  |  +    }
 | 
	
		
			
				|  |  |  +
 | 
	
		
			
				|  |  |  +    indent_down();
 | 
	
	
		
			
				|  | @@ -551,9 +558,10 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |  +        service_name_ << "_method_names[" << i << "], ::grpc::RpcMethod::NORMAL_RPC, channel)" << endl;
 | 
	
		
			
				|  |  |  +    }
 | 
	
		
			
				|  |  |  +
 | 
	
		
			
				|  |  | -+    if (extends_service) {
 | 
	
		
			
				|  |  | ++    service_iter = extends_service;
 | 
	
		
			
				|  |  | ++    while (service_iter) {
 | 
	
		
			
				|  |  |  +      // generate inherited methods
 | 
	
		
			
				|  |  | -+      vector<t_function*> functions = extends_service->get_functions();
 | 
	
		
			
				|  |  | ++      vector<t_function*> functions = service_iter->get_functions();
 | 
	
		
			
				|  |  |  +      vector<t_function*>::iterator f_iter;
 | 
	
		
			
				|  |  |  +      for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter, ++i) {
 | 
	
		
			
				|  |  |  +        f_service_ <<
 | 
	
	
		
			
				|  | @@ -561,6 +569,7 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |  +        ", rpcmethod_" << (*f_iter)->get_name() << "_(" <<
 | 
	
		
			
				|  |  |  +        service_name_ << "_method_names[" << i << "], ::grpc::RpcMethod::NORMAL_RPC, channel)" << endl;
 | 
	
		
			
				|  |  |  +      }
 | 
	
		
			
				|  |  | ++      service_iter = service_iter->get_extends();
 | 
	
		
			
				|  |  |  +    }
 | 
	
		
			
				|  |  |  +    f_service_ <<
 | 
	
		
			
				|  |  |  +    indent() << "{}" << endl;
 | 
	
	
		
			
				|  | @@ -609,8 +618,9 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |  +
 | 
	
		
			
				|  |  |  +    }
 | 
	
		
			
				|  |  |  +
 | 
	
		
			
				|  |  | -+    if (extends_service) {
 | 
	
		
			
				|  |  | -+      vector<t_function*> functions = extends_service->get_functions();
 | 
	
		
			
				|  |  | ++    service_iter = extends_service;
 | 
	
		
			
				|  |  | ++    while (service_iter) {
 | 
	
		
			
				|  |  | ++      vector<t_function*> functions = service_iter->get_functions();
 | 
	
		
			
				|  |  |  +      vector<t_function*>::iterator f_iter;
 | 
	
		
			
				|  |  |  +      for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
 | 
	
		
			
				|  |  |  +        string function_name = (*f_iter)->get_name();
 | 
	
	
		
			
				|  | @@ -631,6 +641,7 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |  +        "}" << endl;
 | 
	
		
			
				|  |  |  +
 | 
	
		
			
				|  |  |  +      }
 | 
	
		
			
				|  |  | ++      service_iter = service_iter->get_extends();
 | 
	
		
			
				|  |  |  +    }
 | 
	
		
			
				|  |  |  +
 | 
	
		
			
				|  |  |  +}
 | 
	
	
		
			
				|  | @@ -648,7 +659,7 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |     if (style == "CobCl") {
 | 
	
		
			
				|  |  |       // Forward declare the client.
 | 
	
		
			
				|  |  |       string client_name = service_name_ + "CobClient";
 | 
	
		
			
				|  |  | -@@ -1764,13 +2049,15 @@ void t_cpp_generator::generate_service_interface(t_service* tservice, string sty
 | 
	
		
			
				|  |  | +@@ -1764,13 +2060,15 @@ void t_cpp_generator::generate_service_interface(t_service* tservice, string sty
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  |   
 | 
	
		
			
				|  |  |     string extends = "";
 | 
	
	
		
			
				|  | @@ -666,7 +677,7 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  |   
 | 
	
		
			
				|  |  |     if (style == "CobCl" && gen_templates_) {
 | 
	
		
			
				|  |  | -@@ -1778,7 +2065,9 @@ void t_cpp_generator::generate_service_interface(t_service* tservice, string sty
 | 
	
		
			
				|  |  | +@@ -1778,7 +2076,9 @@ void t_cpp_generator::generate_service_interface(t_service* tservice, string sty
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  |     f_header_ << "class " << service_if_name << extends << " {" << endl << " public:" << endl;
 | 
	
		
			
				|  |  |     indent_up();
 | 
	
	
		
			
				|  | @@ -677,7 +688,7 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |   
 | 
	
		
			
				|  |  |     vector<t_function*> functions = tservice->get_functions();
 | 
	
		
			
				|  |  |     vector<t_function*>::iterator f_iter;
 | 
	
		
			
				|  |  | -@@ -1786,7 +2075,12 @@ void t_cpp_generator::generate_service_interface(t_service* tservice, string sty
 | 
	
		
			
				|  |  | +@@ -1786,7 +2086,12 @@ void t_cpp_generator::generate_service_interface(t_service* tservice, string sty
 | 
	
		
			
				|  |  |       if ((*f_iter)->has_doc())
 | 
	
		
			
				|  |  |         f_header_ << endl;
 | 
	
		
			
				|  |  |       generate_java_doc(f_header_, *f_iter);
 | 
	
	
		
			
				|  | @@ -691,7 +702,7 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  |     indent_down();
 | 
	
		
			
				|  |  |     f_header_ << "};" << endl << endl;
 | 
	
		
			
				|  |  | -@@ -1797,6 +2091,66 @@ void t_cpp_generator::generate_service_interface(t_service* tservice, string sty
 | 
	
		
			
				|  |  | +@@ -1797,6 +2102,66 @@ void t_cpp_generator::generate_service_interface(t_service* tservice, string sty
 | 
	
		
			
				|  |  |       f_header_ << "typedef " << service_if_name << "< ::apache::thrift::protocol::TProtocol> "
 | 
	
		
			
				|  |  |                 << service_name_ << style << "If;" << endl << endl;
 | 
	
		
			
				|  |  |     }
 | 
	
	
		
			
				|  | @@ -758,7 +769,7 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |   }
 | 
	
		
			
				|  |  |   
 | 
	
		
			
				|  |  |   /**
 | 
	
		
			
				|  |  | -@@ -3095,7 +3449,7 @@ void t_cpp_generator::generate_function_helpers(t_service* tservice, t_function*
 | 
	
		
			
				|  |  | +@@ -3095,7 +3460,7 @@ void t_cpp_generator::generate_function_helpers(t_service* tservice, t_function*
 | 
	
		
			
				|  |  |   
 | 
	
		
			
				|  |  |     std::ofstream& out = (gen_templates_ ? f_service_tcc_ : f_service_);
 | 
	
		
			
				|  |  |   
 | 
	
	
		
			
				|  | @@ -767,7 +778,7 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |     t_field success(tfunction->get_returntype(), "success", 0);
 | 
	
		
			
				|  |  |     if (!tfunction->get_returntype()->is_void()) {
 | 
	
		
			
				|  |  |       result.append(&success);
 | 
	
		
			
				|  |  | -@@ -3109,17 +3463,9 @@ void t_cpp_generator::generate_function_helpers(t_service* tservice, t_function*
 | 
	
		
			
				|  |  | +@@ -3109,17 +3474,9 @@ void t_cpp_generator::generate_function_helpers(t_service* tservice, t_function*
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  |   
 | 
	
		
			
				|  |  |     generate_struct_declaration(f_header_, &result, false);
 | 
	
	
		
			
				|  | @@ -786,7 +797,7 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |   }
 | 
	
		
			
				|  |  |   
 | 
	
		
			
				|  |  |   /**
 | 
	
		
			
				|  |  | -@@ -3162,8 +3508,8 @@ void t_cpp_generator::generate_process_function(t_service* tservice,
 | 
	
		
			
				|  |  | +@@ -3162,8 +3519,8 @@ void t_cpp_generator::generate_process_function(t_service* tservice,
 | 
	
		
			
				|  |  |           << endl;
 | 
	
		
			
				|  |  |       scope_up(out);
 | 
	
		
			
				|  |  |   
 | 
	
	
		
			
				|  | @@ -797,7 +808,7 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |   
 | 
	
		
			
				|  |  |       if (tfunction->is_oneway() && !unnamed_oprot_seqid) {
 | 
	
		
			
				|  |  |         out << indent() << "(void) seqid;" << endl << indent() << "(void) oprot;" << endl;
 | 
	
		
			
				|  |  | -@@ -3320,7 +3666,7 @@ void t_cpp_generator::generate_process_function(t_service* tservice,
 | 
	
		
			
				|  |  | +@@ -3320,7 +3677,7 @@ void t_cpp_generator::generate_process_function(t_service* tservice,
 | 
	
		
			
				|  |  |         out << indent() << "(void) seqid;" << endl << indent() << "(void) oprot;" << endl;
 | 
	
		
			
				|  |  |       }
 | 
	
		
			
				|  |  |   
 | 
	
	
		
			
				|  | @@ -806,7 +817,7 @@ index 6c04899..4e00129 100644
 | 
	
		
			
				|  |  |           << indent() << "void* ctx = NULL;" << endl << indent()
 | 
	
		
			
				|  |  |           << "if (this->eventHandler_.get() != NULL) {" << endl << indent()
 | 
	
		
			
				|  |  |           << "  ctx = this->eventHandler_->getContext(" << service_func_name << ", NULL);" << endl
 | 
	
		
			
				|  |  | -@@ -3487,7 +3833,7 @@ void t_cpp_generator::generate_process_function(t_service* tservice,
 | 
	
		
			
				|  |  | +@@ -3487,7 +3844,7 @@ void t_cpp_generator::generate_process_function(t_service* tservice,
 | 
	
		
			
				|  |  |             << "this->eventHandler_.get(), ctx, " << service_func_name << ");" << endl << endl;
 | 
	
		
			
				|  |  |   
 | 
	
		
			
				|  |  |         // Throw the TDelayedException, and catch the result
 | 
	
	
		
			
				|  | @@ -1475,7 +1486,7 @@ index 0000000..de3c9a4
 | 
	
		
			
				|  |  |  2.8.0.rc3.226.g39d4020
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -From f991f33dd6461eae197b6ad0e7088b571f2a7b22 Mon Sep 17 00:00:00 2001
 | 
	
		
			
				|  |  | +From 3e4d75a2e2c474ee7700e7c9acaf89fdb768bedc Mon Sep 17 00:00:00 2001
 | 
	
		
			
				|  |  |  From: chedeti <chedeti@google.com>
 | 
	
		
			
				|  |  |  Date: Sun, 31 Jul 2016 16:23:53 -0700
 | 
	
		
			
				|  |  |  Subject: [PATCH 3/3] grpc java plugins generator
 |