From e86a2e261f7fe24ef6f049569c605cf48864fa95 Mon Sep 17 00:00:00 2001 From: David Ankin Date: Fri, 16 Feb 2024 16:19:22 -0500 Subject: [PATCH 1/5] commit to implement feedback from #10786 to partially fix #9179 --- .../src/java_plugin/cpp/java_generator.cpp | 31 ++++++++++++++----- compiler/src/java_plugin/cpp/java_plugin.cpp | 7 ++++- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/compiler/src/java_plugin/cpp/java_generator.cpp b/compiler/src/java_plugin/cpp/java_generator.cpp index cf844503567..86d6cde79ce 100644 --- a/compiler/src/java_plugin/cpp/java_generator.cpp +++ b/compiler/src/java_plugin/cpp/java_generator.cpp @@ -1128,12 +1128,26 @@ static void PrintService(const ServiceDescriptor* service, #endif // TODO(nmittler): Replace with WriteServiceDocComment once included by protobuf distro. GrpcWriteServiceDocComment(p, service, NONE); - p->Print( - *vars, - "@$Generated$(\n" - " value = \"by gRPC proto compiler$grpc_version$\",\n" - " comments = \"Source: $file_name$\")\n" - "@$GrpcGenerated$\n"); + + if (vars["javax_mode"].compare("javax") == 0) { + p->Print( + *vars, + "@javax.annotation.Generated(\n" + " value = \"by gRPC proto compiler$grpc_version$\",\n" + " comments = \"Source: $file_name$\")\n" + "@$GrpcGenerated$\n"); + } else if (vars["javax_mode"].compare("omit") == 0) { + p->Print( + *vars, + "@$GrpcGenerated$\n"); + } else { + p->Print( + *vars, + "@javax.annotation.Generated(\n" + " value = \"by gRPC proto compiler$grpc_version$\",\n" + " comments = \"Source: $file_name$\")\n" + "@$GrpcGenerated$\n"); + } if (service->options().deprecated()) { p->Print(*vars, "@$Deprecated$\n"); @@ -1217,7 +1231,8 @@ void PrintImports(Printer* p) { void GenerateService(const ServiceDescriptor* service, protobuf::io::ZeroCopyOutputStream* out, ProtoFlavor flavor, - bool disable_version) { + bool disable_version, + string jakarta_mode) { // All non-generated classes must be referred by fully qualified names to // avoid collision with generated classes. std::map vars; @@ -1249,7 +1264,7 @@ void GenerateService(const ServiceDescriptor* service, vars["MethodDescriptor"] = "io.grpc.MethodDescriptor"; vars["StreamObserver"] = "io.grpc.stub.StreamObserver"; vars["Iterator"] = "java.util.Iterator"; - vars["Generated"] = "javax.annotation.Generated"; + vars["JakartaMode"] = jakarta_mode; vars["GrpcGenerated"] = "io.grpc.stub.annotations.GrpcGenerated"; vars["ListenableFuture"] = "com.google.common.util.concurrent.ListenableFuture"; diff --git a/compiler/src/java_plugin/cpp/java_plugin.cpp b/compiler/src/java_plugin/cpp/java_plugin.cpp index 2eed9d260d1..4d988d61fad 100644 --- a/compiler/src/java_plugin/cpp/java_plugin.cpp +++ b/compiler/src/java_plugin/cpp/java_plugin.cpp @@ -59,12 +59,17 @@ class JavaGrpcGenerator : public protobuf::compiler::CodeGenerator { java_grpc_generator::ProtoFlavor flavor = java_grpc_generator::ProtoFlavor::NORMAL; + string jakarta_mode; bool disable_version = false; for (size_t i = 0; i < options.size(); i++) { if (options[i].first == "lite") { flavor = java_grpc_generator::ProtoFlavor::LITE; } else if (options[i].first == "noversion") { disable_version = true; + } else if (options[i].first == "jakarta_javax") { + jakarta_mode = "javax"; + } else if (options[i].first == "jakarta_omit") { + jakarta_mode = "omit"; } } @@ -77,7 +82,7 @@ class JavaGrpcGenerator : public protobuf::compiler::CodeGenerator { std::unique_ptr output( context->Open(filename)); java_grpc_generator::GenerateService( - service, output.get(), flavor, disable_version); + service, output.get(), flavor, disable_version, jakarta_mode); } return true; } From 2c227c05ad737abf149c7af5cdde6dd092b9c74e Mon Sep 17 00:00:00 2001 From: David Ankin Date: Fri, 16 Feb 2024 16:20:20 -0500 Subject: [PATCH 2/5] typo --- compiler/src/java_plugin/cpp/java_generator.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/src/java_plugin/cpp/java_generator.cpp b/compiler/src/java_plugin/cpp/java_generator.cpp index 86d6cde79ce..b1539e96621 100644 --- a/compiler/src/java_plugin/cpp/java_generator.cpp +++ b/compiler/src/java_plugin/cpp/java_generator.cpp @@ -1129,14 +1129,14 @@ static void PrintService(const ServiceDescriptor* service, // TODO(nmittler): Replace with WriteServiceDocComment once included by protobuf distro. GrpcWriteServiceDocComment(p, service, NONE); - if (vars["javax_mode"].compare("javax") == 0) { + if (vars["JakartaMode"].compare("javax") == 0) { p->Print( *vars, "@javax.annotation.Generated(\n" " value = \"by gRPC proto compiler$grpc_version$\",\n" " comments = \"Source: $file_name$\")\n" "@$GrpcGenerated$\n"); - } else if (vars["javax_mode"].compare("omit") == 0) { + } else if (vars["JakartaMode"].compare("omit") == 0) { p->Print( *vars, "@$GrpcGenerated$\n"); From 8478001335386597b376cafdf9ee68017b585e92 Mon Sep 17 00:00:00 2001 From: David Ankin Date: Fri, 16 Feb 2024 16:26:56 -0500 Subject: [PATCH 3/5] std::string --- compiler/src/java_plugin/cpp/java_generator.cpp | 2 +- compiler/src/java_plugin/cpp/java_plugin.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/src/java_plugin/cpp/java_generator.cpp b/compiler/src/java_plugin/cpp/java_generator.cpp index b1539e96621..fbb854d7b3c 100644 --- a/compiler/src/java_plugin/cpp/java_generator.cpp +++ b/compiler/src/java_plugin/cpp/java_generator.cpp @@ -1232,7 +1232,7 @@ void GenerateService(const ServiceDescriptor* service, protobuf::io::ZeroCopyOutputStream* out, ProtoFlavor flavor, bool disable_version, - string jakarta_mode) { + std::string jakarta_mode) { // All non-generated classes must be referred by fully qualified names to // avoid collision with generated classes. std::map vars; diff --git a/compiler/src/java_plugin/cpp/java_plugin.cpp b/compiler/src/java_plugin/cpp/java_plugin.cpp index 4d988d61fad..22506982417 100644 --- a/compiler/src/java_plugin/cpp/java_plugin.cpp +++ b/compiler/src/java_plugin/cpp/java_plugin.cpp @@ -59,7 +59,7 @@ class JavaGrpcGenerator : public protobuf::compiler::CodeGenerator { java_grpc_generator::ProtoFlavor flavor = java_grpc_generator::ProtoFlavor::NORMAL; - string jakarta_mode; + std::string jakarta_mode; bool disable_version = false; for (size_t i = 0; i < options.size(); i++) { if (options[i].first == "lite") { From 2478e3a96b9fb62cdcb91545d2e9c66288748f12 Mon Sep 17 00:00:00 2001 From: David Ankin Date: Fri, 16 Feb 2024 16:40:24 -0500 Subject: [PATCH 4/5] cpp is hard, actually --- compiler/src/java_plugin/cpp/java_generator.cpp | 8 ++++---- compiler/src/java_plugin/cpp/java_plugin.cpp | 12 +++++++++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/compiler/src/java_plugin/cpp/java_generator.cpp b/compiler/src/java_plugin/cpp/java_generator.cpp index fbb854d7b3c..673598e8993 100644 --- a/compiler/src/java_plugin/cpp/java_generator.cpp +++ b/compiler/src/java_plugin/cpp/java_generator.cpp @@ -1129,14 +1129,14 @@ static void PrintService(const ServiceDescriptor* service, // TODO(nmittler): Replace with WriteServiceDocComment once included by protobuf distro. GrpcWriteServiceDocComment(p, service, NONE); - if (vars["JakartaMode"].compare("javax") == 0) { + if (vars["JakartaMode"][0] == 0) { p->Print( *vars, "@javax.annotation.Generated(\n" " value = \"by gRPC proto compiler$grpc_version$\",\n" " comments = \"Source: $file_name$\")\n" "@$GrpcGenerated$\n"); - } else if (vars["JakartaMode"].compare("omit") == 0) { + } else if (vars["JakartaMode"][0] == 1) { p->Print( *vars, "@$GrpcGenerated$\n"); @@ -1232,7 +1232,7 @@ void GenerateService(const ServiceDescriptor* service, protobuf::io::ZeroCopyOutputStream* out, ProtoFlavor flavor, bool disable_version, - std::string jakarta_mode) { + unsigned char jakarta_mode) { // All non-generated classes must be referred by fully qualified names to // avoid collision with generated classes. std::map vars; @@ -1264,7 +1264,7 @@ void GenerateService(const ServiceDescriptor* service, vars["MethodDescriptor"] = "io.grpc.MethodDescriptor"; vars["StreamObserver"] = "io.grpc.stub.StreamObserver"; vars["Iterator"] = "java.util.Iterator"; - vars["JakartaMode"] = jakarta_mode; + vars["JakartaMode"] = std::string(1, jakarta_mode); vars["GrpcGenerated"] = "io.grpc.stub.annotations.GrpcGenerated"; vars["ListenableFuture"] = "com.google.common.util.concurrent.ListenableFuture"; diff --git a/compiler/src/java_plugin/cpp/java_plugin.cpp b/compiler/src/java_plugin/cpp/java_plugin.cpp index 22506982417..2db7d92e4e6 100644 --- a/compiler/src/java_plugin/cpp/java_plugin.cpp +++ b/compiler/src/java_plugin/cpp/java_plugin.cpp @@ -59,7 +59,13 @@ class JavaGrpcGenerator : public protobuf::compiler::CodeGenerator { java_grpc_generator::ProtoFlavor flavor = java_grpc_generator::ProtoFlavor::NORMAL; - std::string jakarta_mode; + /* + jakarta_mode has these values: + 0 = javax, the original behavior + 1 = omit, the "less controversial" behavior + and maybe others in the future + */ + unsigned char jakarta_mode = 0; bool disable_version = false; for (size_t i = 0; i < options.size(); i++) { if (options[i].first == "lite") { @@ -67,9 +73,9 @@ class JavaGrpcGenerator : public protobuf::compiler::CodeGenerator { } else if (options[i].first == "noversion") { disable_version = true; } else if (options[i].first == "jakarta_javax") { - jakarta_mode = "javax"; + jakarta_mode = 0; } else if (options[i].first == "jakarta_omit") { - jakarta_mode = "omit"; + jakarta_mode = 1; } } From f53892efeaeb3573e41e700e64c393f1d288b921 Mon Sep 17 00:00:00 2001 From: David Ankin Date: Fri, 16 Feb 2024 16:57:47 -0500 Subject: [PATCH 5/5] build the damn thing locally --- compiler/src/java_plugin/cpp/java_generator.cpp | 8 ++++---- compiler/src/java_plugin/cpp/java_generator.h | 3 ++- compiler/src/java_plugin/cpp/java_plugin.cpp | 10 +++++----- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/compiler/src/java_plugin/cpp/java_generator.cpp b/compiler/src/java_plugin/cpp/java_generator.cpp index 673598e8993..00855df3d04 100644 --- a/compiler/src/java_plugin/cpp/java_generator.cpp +++ b/compiler/src/java_plugin/cpp/java_generator.cpp @@ -1129,14 +1129,14 @@ static void PrintService(const ServiceDescriptor* service, // TODO(nmittler): Replace with WriteServiceDocComment once included by protobuf distro. GrpcWriteServiceDocComment(p, service, NONE); - if (vars["JakartaMode"][0] == 0) { + if ((*vars)["JakartaMode"] == "javax") { p->Print( *vars, "@javax.annotation.Generated(\n" " value = \"by gRPC proto compiler$grpc_version$\",\n" " comments = \"Source: $file_name$\")\n" "@$GrpcGenerated$\n"); - } else if (vars["JakartaMode"][0] == 1) { + } else if ((*vars)["JakartaMode"] == "omit") { p->Print( *vars, "@$GrpcGenerated$\n"); @@ -1232,7 +1232,7 @@ void GenerateService(const ServiceDescriptor* service, protobuf::io::ZeroCopyOutputStream* out, ProtoFlavor flavor, bool disable_version, - unsigned char jakarta_mode) { + std::string jakarta_mode) { // All non-generated classes must be referred by fully qualified names to // avoid collision with generated classes. std::map vars; @@ -1264,7 +1264,7 @@ void GenerateService(const ServiceDescriptor* service, vars["MethodDescriptor"] = "io.grpc.MethodDescriptor"; vars["StreamObserver"] = "io.grpc.stub.StreamObserver"; vars["Iterator"] = "java.util.Iterator"; - vars["JakartaMode"] = std::string(1, jakarta_mode); + vars["JakartaMode"] = jakarta_mode; vars["GrpcGenerated"] = "io.grpc.stub.annotations.GrpcGenerated"; vars["ListenableFuture"] = "com.google.common.util.concurrent.ListenableFuture"; diff --git a/compiler/src/java_plugin/cpp/java_generator.h b/compiler/src/java_plugin/cpp/java_generator.h index f3ec49f8e27..d30179d334e 100644 --- a/compiler/src/java_plugin/cpp/java_generator.h +++ b/compiler/src/java_plugin/cpp/java_generator.h @@ -68,7 +68,8 @@ std::string ServiceClassName(const impl::protobuf::ServiceDescriptor* service); void GenerateService(const impl::protobuf::ServiceDescriptor* service, impl::protobuf::io::ZeroCopyOutputStream* out, ProtoFlavor flavor, - bool disable_version); + bool disable_version, + std::string jakarta_mode); } // namespace java_grpc_generator diff --git a/compiler/src/java_plugin/cpp/java_plugin.cpp b/compiler/src/java_plugin/cpp/java_plugin.cpp index 2db7d92e4e6..36f22893f63 100644 --- a/compiler/src/java_plugin/cpp/java_plugin.cpp +++ b/compiler/src/java_plugin/cpp/java_plugin.cpp @@ -61,11 +61,11 @@ class JavaGrpcGenerator : public protobuf::compiler::CodeGenerator { /* jakarta_mode has these values: - 0 = javax, the original behavior - 1 = omit, the "less controversial" behavior + javax, the original behavior - add @javax.annotation.Generated + omit, "less controversial" = just add @io.grpc.stub.annotations.GrpcGenerated and maybe others in the future */ - unsigned char jakarta_mode = 0; + std::string jakarta_mode; bool disable_version = false; for (size_t i = 0; i < options.size(); i++) { if (options[i].first == "lite") { @@ -73,9 +73,9 @@ class JavaGrpcGenerator : public protobuf::compiler::CodeGenerator { } else if (options[i].first == "noversion") { disable_version = true; } else if (options[i].first == "jakarta_javax") { - jakarta_mode = 0; + jakarta_mode = "javax"; } else if (options[i].first == "jakarta_omit") { - jakarta_mode = 1; + jakarta_mode = "omit"; } }