diff --git a/src/compiler/csharp_generator.cc b/src/compiler/csharp_generator.cc index 5744d7c96a9..0d1404341d2 100644 --- a/src/compiler/csharp_generator.cc +++ b/src/compiler/csharp_generator.cc @@ -123,6 +123,10 @@ std::string GetMethodRequestParamMaybe(const MethodDescriptor *method, return GetClassName(method->input_type()) + " request, "; } +std::string GetAccessLevel(bool internal_access) { + return internal_access ? "internal" : "public"; +} + std::string GetMethodReturnTypeClient(const MethodDescriptor *method) { switch (GetMethodType(method)) { case METHODTYPE_NO_STREAMING: @@ -528,8 +532,10 @@ void GenerateNewStubMethods(Printer* out, const ServiceDescriptor *service) { } void GenerateService(Printer* out, const ServiceDescriptor *service, - bool generate_client, bool generate_server) { - out->Print("public static class $classname$\n", "classname", + bool generate_client, bool generate_server, + bool internal_access) { + out->Print("$access_level$ static class $classname$\n", "access_level", + GetAccessLevel(internal_access), "classname", GetServiceClassName(service)); out->Print("{\n"); out->Indent(); @@ -567,7 +573,7 @@ void GenerateService(Printer* out, const ServiceDescriptor *service, } // anonymous namespace grpc::string GetServices(const FileDescriptor *file, bool generate_client, - bool generate_server) { + bool generate_server, bool internal_access) { grpc::string output; { // Scope the output stream so it closes and finalizes output to the string. @@ -595,7 +601,8 @@ grpc::string GetServices(const FileDescriptor *file, bool generate_client, out.Print("namespace $namespace$ {\n", "namespace", GetFileNamespace(file)); out.Indent(); for (int i = 0; i < file->service_count(); i++) { - GenerateService(&out, file->service(i), generate_client, generate_server); + GenerateService(&out, file->service(i), generate_client, generate_server, + internal_access); } out.Outdent(); out.Print("}\n"); diff --git a/src/compiler/csharp_generator.h b/src/compiler/csharp_generator.h index 79c2e57266e..f0585af4fd7 100644 --- a/src/compiler/csharp_generator.h +++ b/src/compiler/csharp_generator.h @@ -41,7 +41,8 @@ namespace grpc_csharp_generator { grpc::string GetServices(const grpc::protobuf::FileDescriptor *file, - bool generate_client, bool generate_server); + bool generate_client, bool generate_server, + bool internal_access); } // namespace grpc_csharp_generator diff --git a/src/compiler/csharp_plugin.cc b/src/compiler/csharp_plugin.cc index fd1ec99e2b2..5350e73f108 100644 --- a/src/compiler/csharp_plugin.cc +++ b/src/compiler/csharp_plugin.cc @@ -53,11 +53,14 @@ class CSharpGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator { bool generate_client = true; bool generate_server = true; + bool internal_access = false; for (size_t i = 0; i < options.size(); i++) { if (options[i].first == "no_client") { generate_client = false; } else if (options[i].first == "no_server") { generate_server = false; + } else if (options[i].first == "internal_access") { + internal_access = true; } else { *error = "Unknown generator option: " + options[i].first; return false; @@ -66,7 +69,8 @@ class CSharpGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator { grpc::string code = grpc_csharp_generator::GetServices(file, generate_client, - generate_server); + generate_server, + internal_access); if (code.size() == 0) { return true; // don't generate a file if there are no services }