diff options
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/config.h | 11 | ||||
-rw-r--r-- | src/compiler/cpp_generator_helpers.h | 7 | ||||
-rw-r--r-- | src/compiler/cpp_plugin.cc | 2 | ||||
-rw-r--r-- | src/compiler/csharp_generator.cc | 119 | ||||
-rw-r--r-- | src/compiler/csharp_generator_helpers.h | 7 | ||||
-rw-r--r-- | src/compiler/generator_helpers.h | 8 | ||||
-rw-r--r-- | src/compiler/node_generator.cc | 103 | ||||
-rw-r--r-- | src/compiler/node_generator.h | 6 | ||||
-rw-r--r-- | src/compiler/node_generator_helpers.h | 7 | ||||
-rw-r--r-- | src/compiler/node_plugin.cc | 8 | ||||
-rw-r--r-- | src/compiler/ruby_generator.cc | 18 | ||||
-rw-r--r-- | src/compiler/ruby_generator_helpers-inl.h | 8 |
12 files changed, 116 insertions, 188 deletions
diff --git a/src/compiler/config.h b/src/compiler/config.h index d8b95818db..f2abb85186 100644 --- a/src/compiler/config.h +++ b/src/compiler/config.h @@ -34,8 +34,7 @@ #ifndef SRC_COMPILER_CONFIG_H #define SRC_COMPILER_CONFIG_H -#include <grpc++/support/config.h> -#include <grpc++/support/config_protobuf.h> +#include <grpc++/impl/codegen/config_protobuf.h> #ifndef GRPC_CUSTOM_DESCRIPTOR #include <google/protobuf/descriptor.h> @@ -75,7 +74,15 @@ #define GRPC_CUSTOM_PARSEGENERATORPARAMETER ::google::protobuf::compiler::ParseGeneratorParameter #endif +#ifndef GRPC_CUSTOM_STRING +#include <string> +#define GRPC_CUSTOM_STRING std::string +#endif + namespace grpc { + +typedef GRPC_CUSTOM_STRING string; + namespace protobuf { typedef GRPC_CUSTOM_DESCRIPTOR Descriptor; typedef GRPC_CUSTOM_FILEDESCRIPTOR FileDescriptor; diff --git a/src/compiler/cpp_generator_helpers.h b/src/compiler/cpp_generator_helpers.h index be68cbe695..87e278f1b9 100644 --- a/src/compiler/cpp_generator_helpers.h +++ b/src/compiler/cpp_generator_helpers.h @@ -65,6 +65,13 @@ inline grpc::string ClassName(const grpc::protobuf::Descriptor *descriptor, } } +// Get leading or trailing comments in a string. Comment lines start with "// ". +// Leading detached comments are put in in front of leading comments. +template <typename DescriptorType> +inline grpc::string GetCppComments(const DescriptorType *desc, bool leading) { + return grpc_generator::GetPrefixedComments(desc, leading, "//"); +} + } // namespace grpc_cpp_generator #endif // GRPC_INTERNAL_COMPILER_CPP_GENERATOR_HELPERS_H diff --git a/src/compiler/cpp_plugin.cc b/src/compiler/cpp_plugin.cc index 0ec183e474..fc0296cd28 100644 --- a/src/compiler/cpp_plugin.cc +++ b/src/compiler/cpp_plugin.cc @@ -43,7 +43,7 @@ #include "src/compiler/cpp_generator_helpers.h" #include "src/compiler/generator_helpers.h" -using grpc_generator::GetCppComments; +using grpc_cpp_generator::GetCppComments; class ProtoBufMethod : public grpc_cpp_generator::Method { public: diff --git a/src/compiler/csharp_generator.cc b/src/compiler/csharp_generator.cc index 29c359c539..fc8feaf0fc 100644 --- a/src/compiler/csharp_generator.cc +++ b/src/compiler/csharp_generator.cc @@ -52,7 +52,6 @@ using grpc::protobuf::MethodDescriptor; using grpc::protobuf::io::Printer; using grpc::protobuf::io::StringOutputStream; using grpc_generator::MethodType; -using grpc_generator::GetCppComments; using grpc_generator::GetMethodType; using grpc_generator::METHODTYPE_NO_STREAMING; using grpc_generator::METHODTYPE_CLIENT_STREAMING; @@ -120,18 +119,10 @@ std::string GetServiceClassName(const ServiceDescriptor* service) { return service->name(); } -std::string GetClientInterfaceName(const ServiceDescriptor* service) { - return "I" + service->name() + "Client"; -} - std::string GetClientClassName(const ServiceDescriptor* service) { return service->name() + "Client"; } -std::string GetServerInterfaceName(const ServiceDescriptor* service) { - return "I" + service->name(); -} - std::string GetServerClassName(const ServiceDescriptor* service) { return service->name() + "Base"; } @@ -303,86 +294,6 @@ void GenerateServiceDescriptorProperty(Printer* out, const ServiceDescriptor *se out->Print("\n"); } -void GenerateClientInterface(Printer* out, const ServiceDescriptor *service) { - out->Print("/// <summary>Client for $servicename$</summary>\n", - "servicename", GetServiceClassName(service)); - out->Print("[System.Obsolete(\"Client side interfaced will be removed " - "in the next release. Use client class directly.\")]\n"); - out->Print("public interface $name$\n", "name", - GetClientInterfaceName(service)); - out->Print("{\n"); - out->Indent(); - for (int i = 0; i < service->method_count(); i++) { - const MethodDescriptor *method = service->method(i); - MethodType method_type = GetMethodType(method); - - if (method_type == METHODTYPE_NO_STREAMING) { - // unary calls have an extra synchronous stub method - GenerateDocCommentBody(out, method); - out->Print( - "$response$ $methodname$($request$ request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));\n", - "methodname", method->name(), "request", - GetClassName(method->input_type()), "response", - GetClassName(method->output_type())); - - // overload taking CallOptions as a param - GenerateDocCommentBody(out, method); - out->Print( - "$response$ $methodname$($request$ request, CallOptions options);\n", - "methodname", method->name(), "request", - GetClassName(method->input_type()), "response", - GetClassName(method->output_type())); - } - - std::string method_name = method->name(); - if (method_type == METHODTYPE_NO_STREAMING) { - method_name += "Async"; // prevent name clash with synchronous method. - } - GenerateDocCommentBody(out, method); - out->Print( - "$returntype$ $methodname$($request_maybe$Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));\n", - "methodname", method_name, "request_maybe", - GetMethodRequestParamMaybe(method), "returntype", - GetMethodReturnTypeClient(method)); - - // overload taking CallOptions as a param - GenerateDocCommentBody(out, method); - out->Print( - "$returntype$ $methodname$($request_maybe$CallOptions options);\n", - "methodname", method_name, "request_maybe", - GetMethodRequestParamMaybe(method), "returntype", - GetMethodReturnTypeClient(method)); - } - out->Outdent(); - out->Print("}\n"); - out->Print("\n"); -} - -void GenerateServerInterface(Printer* out, const ServiceDescriptor *service) { - out->Print("/// <summary>Interface of server-side implementations of $servicename$</summary>\n", - "servicename", GetServiceClassName(service)); - out->Print("[System.Obsolete(\"Service implementations should inherit" - " from the generated abstract base class instead.\")]\n"); - out->Print("public interface $name$\n", "name", - GetServerInterfaceName(service)); - out->Print("{\n"); - out->Indent(); - for (int i = 0; i < service->method_count(); i++) { - const MethodDescriptor *method = service->method(i); - GenerateDocCommentBody(out, method); - out->Print( - "$returntype$ $methodname$($request$$response_stream_maybe$, " - "ServerCallContext context);\n", - "methodname", method->name(), "returntype", - GetMethodReturnTypeServer(method), "request", - GetMethodRequestParamServer(method), "response_stream_maybe", - GetMethodResponseStreamMaybe(method)); - } - out->Outdent(); - out->Print("}\n"); - out->Print("\n"); -} - void GenerateServerClass(Printer* out, const ServiceDescriptor *service) { out->Print("/// <summary>Base class for server-side implementations of $servicename$</summary>\n", "servicename", GetServiceClassName(service)); @@ -415,12 +326,9 @@ void GenerateServerClass(Printer* out, const ServiceDescriptor *service) { void GenerateClientStub(Printer* out, const ServiceDescriptor *service) { out->Print("/// <summary>Client for $servicename$</summary>\n", "servicename", GetServiceClassName(service)); - out->Print("#pragma warning disable 0618\n"); out->Print( - "public class $name$ : ClientBase<$name$>, $interface$\n", - "name", GetClientClassName(service), - "interface", GetClientInterfaceName(service)); - out->Print("#pragma warning restore 0618\n"); + "public class $name$ : ClientBase<$name$>\n", + "name", GetClientClassName(service)); out->Print("{\n"); out->Indent(); @@ -547,22 +455,16 @@ void GenerateClientStub(Printer* out, const ServiceDescriptor *service) { out->Print("\n"); } -void GenerateBindServiceMethod(Printer* out, const ServiceDescriptor *service, - bool use_server_class) { +void GenerateBindServiceMethod(Printer* out, const ServiceDescriptor *service) { out->Print( "/// <summary>Creates service definition that can be registered with a server</summary>\n"); - out->Print("#pragma warning disable 0618\n"); out->Print( - "public static ServerServiceDefinition BindService($interface$ serviceImpl)\n", - "interface", use_server_class ? GetServerClassName(service) : - GetServerInterfaceName(service)); - out->Print("#pragma warning restore 0618\n"); + "public static ServerServiceDefinition BindService($implclass$ serviceImpl)\n", + "implclass", GetServerClassName(service)); out->Print("{\n"); out->Indent(); - out->Print( - "return ServerServiceDefinition.CreateBuilder($servicenamefield$)\n", - "servicenamefield", GetServiceNameFieldName()); + out->Print("return ServerServiceDefinition.CreateBuilder()\n"); out->Indent(); out->Indent(); for (int i = 0; i < service->method_count(); i++) { @@ -617,11 +519,7 @@ void GenerateService(Printer* out, const ServiceDescriptor *service, } GenerateServiceDescriptorProperty(out, service); - if (generate_client) { - GenerateClientInterface(out, service); - } if (generate_server) { - GenerateServerInterface(out, service); GenerateServerClass(out, service); } if (generate_client) { @@ -629,8 +527,7 @@ void GenerateService(Printer* out, const ServiceDescriptor *service, GenerateNewStubMethods(out, service); } if (generate_server) { - GenerateBindServiceMethod(out, service, false); - GenerateBindServiceMethod(out, service, true); + GenerateBindServiceMethod(out, service); } out->Outdent(); @@ -659,7 +556,7 @@ grpc::string GetServices(const FileDescriptor *file, bool generate_client, out.Print("// source: $filename$\n", "filename", file->name()); // use C++ style as there are no file-level XML comments in .NET - grpc::string leading_comments = GetCppComments(file, true); + grpc::string leading_comments = GetCsharpComments(file, true); if (!leading_comments.empty()) { out.Print("// Original file comments:\n"); out.Print(leading_comments.c_str()); diff --git a/src/compiler/csharp_generator_helpers.h b/src/compiler/csharp_generator_helpers.h index 5639ea058b..9bdf6fb535 100644 --- a/src/compiler/csharp_generator_helpers.h +++ b/src/compiler/csharp_generator_helpers.h @@ -45,6 +45,13 @@ inline bool ServicesFilename(const grpc::protobuf::FileDescriptor *file, return true; } +// Get leading or trailing comments in a string. Comment lines start with "// ". +// Leading detached comments are put in in front of leading comments. +template <typename DescriptorType> +inline grpc::string GetCsharpComments(const DescriptorType *desc, bool leading) { + return grpc_generator::GetPrefixedComments(desc, leading, "//"); +} + } // namespace grpc_csharp_generator #endif // GRPC_INTERNAL_COMPILER_CSHARP_GENERATOR_HELPERS_H diff --git a/src/compiler/generator_helpers.h b/src/compiler/generator_helpers.h index bd077cf798..53391bc41a 100644 --- a/src/compiler/generator_helpers.h +++ b/src/compiler/generator_helpers.h @@ -265,10 +265,10 @@ inline grpc::string GenerateCommentsWithPrefix( return oss.str(); } -// Get leading or trailing comments in a string. Comment lines start with "// ". -// Leading detached comments are put in in front of leading comments. template <typename DescriptorType> -inline grpc::string GetCppComments(const DescriptorType *desc, bool leading) { +inline grpc::string GetPrefixedComments(const DescriptorType *desc, + bool leading, + const grpc::string &prefix) { std::vector<grpc::string> out; if (leading) { grpc_generator::GetComment( @@ -281,7 +281,7 @@ inline grpc::string GetCppComments(const DescriptorType *desc, bool leading) { grpc_generator::GetComment(desc, grpc_generator::COMMENTTYPE_TRAILING, &out); } - return GenerateCommentsWithPrefix(out, "//"); + return GenerateCommentsWithPrefix(out, prefix); } } // namespace grpc_generator diff --git a/src/compiler/node_generator.cc b/src/compiler/node_generator.cc index 822622cccf..986b97c26e 100644 --- a/src/compiler/node_generator.cc +++ b/src/compiler/node_generator.cc @@ -181,62 +181,67 @@ void PrintMethod(const MethodDescriptor *method, Printer *out) { // Prints out the service descriptor object void PrintService(const ServiceDescriptor *service, Printer *out) { map<grpc::string, grpc::string> template_vars; + out->Print(GetNodeComments(service, true).c_str()); template_vars["name"] = service->name(); out->Print(template_vars, "var $name$Service = exports.$name$Service = {\n"); out->Indent(); for (int i = 0; i < service->method_count(); i++) { grpc::string method_name = grpc_generator::LowercaseFirstLetter( service->method(i)->name()); + out->Print(GetNodeComments(service->method(i), true).c_str()); out->Print("$method_name$: ", "method_name", method_name); PrintMethod(service->method(i), out); out->Print(",\n"); + out->Print(GetNodeComments(service->method(i), false).c_str()); } out->Outdent(); out->Print("};\n\n"); out->Print(template_vars, "exports.$name$Client = " "grpc.makeGenericClientConstructor($name$Service);\n"); + out->Print(GetNodeComments(service, false).c_str()); } -} - -grpc::string GetImports(const FileDescriptor *file) { - grpc::string output; - { - StringOutputStream output_stream(&output); - Printer out(&output_stream, '$'); - - if (file->service_count() == 0) { - return output; - } - - out.Print("// GENERATED CODE -- DO NOT EDIT!\n\n"); +void PrintImports(const FileDescriptor *file, Printer *out) { + out->Print("var grpc = require('grpc');\n"); + if (file->message_type_count() > 0) { + grpc::string file_path = GetRelativePath(file->name(), + GetJSMessageFilename( + file->name())); + out->Print("var $module_alias$ = require('$file_path$');\n", + "module_alias", ModuleAlias(file->name()), + "file_path", file_path); + } - out.Print("'use strict';\n"); + for (int i = 0; i < file->dependency_count(); i++) { + grpc::string file_path = GetRelativePath( + file->name(), GetJSMessageFilename(file->dependency(i)->name())); + out->Print("var $module_alias$ = require('$file_path$');\n", + "module_alias", ModuleAlias(file->dependency(i)->name()), + "file_path", file_path); + } + out->Print("\n"); +} - out.Print("var grpc = require('grpc');\n"); - if (file->message_type_count() > 0) { - grpc::string file_path = GetRelativePath(file->name(), - GetJSMessageFilename( - file->name())); - out.Print("var $module_alias$ = require('$file_path$');\n", - "module_alias", ModuleAlias(file->name()), - "file_path", file_path); - } +void PrintTransformers(const FileDescriptor *file, Printer *out) { + map<grpc::string, const Descriptor*> messages = GetAllMessages(file); + for (std::map<grpc::string, const Descriptor*>::iterator it = + messages.begin(); + it != messages.end(); it++) { + PrintMessageTransformer(it->second, out); + } + out->Print("\n"); +} - for (int i = 0; i < file->dependency_count(); i++) { - grpc::string file_path = GetRelativePath( - file->name(), GetJSMessageFilename(file->dependency(i)->name())); - out.Print("var $module_alias$ = require('$file_path$');\n", - "module_alias", ModuleAlias(file->dependency(i)->name()), - "file_path", file_path); - } - out.Print("\n"); +void PrintServices(const FileDescriptor *file, Printer *out) { + for (int i = 0; i < file->service_count(); i++) { + PrintService(file->service(i), out); } - return output; } -grpc::string GetTransformers(const FileDescriptor *file) { +} + +grpc::string GenerateFile(const FileDescriptor *file) { grpc::string output; { StringOutputStream output_stream(&output); @@ -245,31 +250,23 @@ grpc::string GetTransformers(const FileDescriptor *file) { if (file->service_count() == 0) { return output; } + out.Print("// GENERATED CODE -- DO NOT EDIT!\n\n"); - map<grpc::string, const Descriptor*> messages = GetAllMessages(file); - for (std::map<grpc::string, const Descriptor*>::iterator it = - messages.begin(); - it != messages.end(); it++) { - PrintMessageTransformer(it->second, &out); + grpc::string leading_comments = GetNodeComments(file, true); + if (!leading_comments.empty()) { + out.Print("// Original file comments:\n"); + out.Print(leading_comments.c_str()); } - out.Print("\n"); - } - return output; -} -grpc::string GetServices(const FileDescriptor *file) { - grpc::string output; - { - StringOutputStream output_stream(&output); - Printer out(&output_stream, '$'); + out.Print("'use strict';\n"); - if (file->service_count() == 0) { - return output; - } + PrintImports(file, &out); - for (int i = 0; i < file->service_count(); i++) { - PrintService(file->service(i), &out); - } + PrintTransformers(file, &out); + + PrintServices(file, &out); + + out.Print(GetNodeComments(file, false).c_str()); } return output; } diff --git a/src/compiler/node_generator.h b/src/compiler/node_generator.h index 249a0d011f..d7765e2d28 100644 --- a/src/compiler/node_generator.h +++ b/src/compiler/node_generator.h @@ -38,11 +38,7 @@ namespace grpc_node_generator { -grpc::string GetImports(const grpc::protobuf::FileDescriptor *file); - -grpc::string GetTransformers(const grpc::protobuf::FileDescriptor *file); - -grpc::string GetServices(const grpc::protobuf::FileDescriptor *file); +grpc::string GenerateFile(const grpc::protobuf::FileDescriptor *file); } // namespace grpc_node_generator diff --git a/src/compiler/node_generator_helpers.h b/src/compiler/node_generator_helpers.h index f41a2bcf59..5862772841 100644 --- a/src/compiler/node_generator_helpers.h +++ b/src/compiler/node_generator_helpers.h @@ -45,6 +45,13 @@ inline grpc::string GetJSServiceFilename(const grpc::string& filename) { return grpc_generator::StripProto(filename) + "_grpc_pb.js"; } +// Get leading or trailing comments in a string. Comment lines start with "// ". +// Leading detached comments are put in in front of leading comments. +template <typename DescriptorType> +inline grpc::string GetNodeComments(const DescriptorType *desc, bool leading) { + return grpc_generator::GetPrefixedComments(desc, leading, "//"); +} + } // namespace grpc_node_generator #endif // GRPC_INTERNAL_COMPILER_NODE_GENERATOR_HELPERS_H diff --git a/src/compiler/node_plugin.cc b/src/compiler/node_plugin.cc index ac5ced3558..39dfa77b8d 100644 --- a/src/compiler/node_plugin.cc +++ b/src/compiler/node_plugin.cc @@ -39,10 +39,8 @@ #include "src/compiler/node_generator.h" #include "src/compiler/node_generator_helpers.h" -using grpc_node_generator::GetImports; +using grpc_node_generator::GenerateFile; using grpc_node_generator::GetJSServiceFilename; -using grpc_node_generator::GetServices; -using grpc_node_generator::GetTransformers; class NodeGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator { public: @@ -53,9 +51,7 @@ class NodeGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator { const grpc::string ¶meter, grpc::protobuf::compiler::GeneratorContext *context, grpc::string *error) const { - grpc::string code = GetImports(file) + - GetTransformers(file) + - GetServices(file); + grpc::string code = GenerateFile(file); if (code.size() == 0) { return true; } diff --git a/src/compiler/ruby_generator.cc b/src/compiler/ruby_generator.cc index 936a186beb..1501c3f3e0 100644 --- a/src/compiler/ruby_generator.cc +++ b/src/compiler/ruby_generator.cc @@ -66,7 +66,9 @@ void PrintMethod(const MethodDescriptor *method, const grpc::string &package, std::map<grpc::string, grpc::string> method_vars = ListToDict({"mth.name", method->name(), "input.type", input_type, "output.type", output_type, }); + out->Print(GetRubyComments(method, true).c_str()); out->Print(method_vars, "rpc :$mth.name$, $input.type$, $output.type$\n"); + out->Print(GetRubyComments(method, false).c_str()); } // Prints out the service using the ruby gRPC DSL. @@ -82,12 +84,7 @@ void PrintService(const ServiceDescriptor *service, const grpc::string &package, out->Print(module_vars, "module $module.name$\n"); out->Indent(); - // TODO(temiola): add documentation - grpc::string doc = "TODO: add proto service documentation here"; - std::map<grpc::string, grpc::string> template_vars = - ListToDict({"Documentation", doc, }); - out->Print("\n"); - out->Print(template_vars, "# $Documentation$\n"); + out->Print(GetRubyComments(service, true).c_str()); out->Print("class Service\n"); // Write the indented class body. @@ -113,6 +110,7 @@ void PrintService(const ServiceDescriptor *service, const grpc::string &package, // End the service module out->Outdent(); out->Print("end\n"); + out->Print(GetRubyComments(service, false).c_str()); } } // namespace @@ -138,6 +136,12 @@ grpc::string GetServices(const FileDescriptor *file) { out.Print(header_comment_vars, "# Source: $file.name$ for package '$file.package$'\n"); + grpc::string leading_comments = GetRubyComments(file, true); + if (!leading_comments.empty()) { + out.Print("# Original file comments:\n"); + out.Print(leading_comments.c_str()); + } + out.Print("\n"); out.Print("require 'grpc'\n"); // Write out require statemment to import the separately generated file @@ -164,6 +168,8 @@ grpc::string GetServices(const FileDescriptor *file) { out.Outdent(); out.Print("end\n"); } + + out.Print(GetRubyComments(file, false).c_str()); } return output; } diff --git a/src/compiler/ruby_generator_helpers-inl.h b/src/compiler/ruby_generator_helpers-inl.h index 9da7cab3c7..ff6939ed9f 100644 --- a/src/compiler/ruby_generator_helpers-inl.h +++ b/src/compiler/ruby_generator_helpers-inl.h @@ -35,6 +35,7 @@ #define GRPC_INTERNAL_COMPILER_RUBY_GENERATOR_HELPERS_INL_H #include "src/compiler/config.h" +#include "src/compiler/generator_helpers.h" #include "src/compiler/ruby_generator_string-inl.h" namespace grpc_ruby_generator { @@ -60,6 +61,13 @@ inline grpc::string MessagesRequireName( return Replace(file->name(), ".proto", ""); } +// Get leading or trailing comments in a string. Comment lines start with "# ". +// Leading detached comments are put in in front of leading comments. +template <typename DescriptorType> +inline grpc::string GetRubyComments(const DescriptorType *desc, bool leading) { + return grpc_generator::GetPrefixedComments(desc, leading, "#"); +} + } // namespace grpc_ruby_generator #endif // GRPC_INTERNAL_COMPILER_RUBY_GENERATOR_HELPERS_INL_H |