aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/grpc-java/compiler/src/java_plugin/cpp/java_plugin.cpp
diff options
context:
space:
mode:
authormonster <monster@ydb.tech>2022-07-07 14:41:37 +0300
committermonster <monster@ydb.tech>2022-07-07 14:41:37 +0300
commit06e5c21a835c0e923506c4ff27929f34e00761c2 (patch)
tree75efcbc6854ef9bd476eb8bf00cc5c900da436a2 /contrib/libs/grpc-java/compiler/src/java_plugin/cpp/java_plugin.cpp
parent03f024c4412e3aa613bb543cf1660176320ba8f4 (diff)
downloadydb-06e5c21a835c0e923506c4ff27929f34e00761c2.tar.gz
fix ya.make
Diffstat (limited to 'contrib/libs/grpc-java/compiler/src/java_plugin/cpp/java_plugin.cpp')
-rw-r--r--contrib/libs/grpc-java/compiler/src/java_plugin/cpp/java_plugin.cpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/contrib/libs/grpc-java/compiler/src/java_plugin/cpp/java_plugin.cpp b/contrib/libs/grpc-java/compiler/src/java_plugin/cpp/java_plugin.cpp
new file mode 100644
index 0000000000..630cf42741
--- /dev/null
+++ b/contrib/libs/grpc-java/compiler/src/java_plugin/cpp/java_plugin.cpp
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2019 The gRPC Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Generates Java gRPC service interface out of Protobuf IDL.
+//
+// This is a Proto2 compiler plugin. See net/proto2/compiler/proto/plugin.proto
+// and net/proto2/compiler/public/plugin.h for more information on plugins.
+
+#include <memory>
+
+#include "java_generator.h"
+#include <google/protobuf/compiler/code_generator.h>
+#include <google/protobuf/compiler/plugin.h>
+#include <google/protobuf/descriptor.h>
+#include <google/protobuf/io/zero_copy_stream.h>
+
+namespace protobuf = google::protobuf;
+
+static TString JavaPackageToDir(const TString& package_name) {
+ TString package_dir = package_name;
+ for (size_t i = 0; i < package_dir.size(); ++i) {
+ if (package_dir[i] == '.') {
+ package_dir[i] = '/';
+ }
+ }
+ if (!package_dir.empty()) package_dir += "/";
+ return package_dir;
+}
+
+class JavaGrpcGenerator : public protobuf::compiler::CodeGenerator {
+ public:
+ JavaGrpcGenerator() {}
+ virtual ~JavaGrpcGenerator() {}
+
+ uint64_t GetSupportedFeatures() const override {
+ return FEATURE_PROTO3_OPTIONAL;
+ }
+
+ virtual bool Generate(const protobuf::FileDescriptor* file,
+ const TString& parameter,
+ protobuf::compiler::GeneratorContext* context,
+ TString* error) const override {
+ std::vector<std::pair<TString, TString> > options;
+ protobuf::compiler::ParseGeneratorParameter(parameter, &options);
+
+ java_grpc_generator::ProtoFlavor flavor =
+ java_grpc_generator::ProtoFlavor::NORMAL;
+
+ 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;
+ }
+ }
+
+ TString package_name = java_grpc_generator::ServiceJavaPackage(file);
+ TString package_filename = JavaPackageToDir(package_name);
+ for (int i = 0; i < file->service_count(); ++i) {
+ const protobuf::ServiceDescriptor* service = file->service(i);
+ TString filename = package_filename
+ + java_grpc_generator::ServiceClassName(service) + ".java";
+ std::unique_ptr<protobuf::io::ZeroCopyOutputStream> output(
+ context->Open(filename));
+ java_grpc_generator::GenerateService(
+ service, output.get(), flavor, disable_version);
+ }
+ return true;
+ }
+};
+
+int main(int argc, char* argv[]) {
+ JavaGrpcGenerator generator;
+ return protobuf::compiler::PluginMain(argc, argv, &generator);
+}