diff options
author | monster <monster@ydb.tech> | 2022-07-07 14:41:37 +0300 |
---|---|---|
committer | monster <monster@ydb.tech> | 2022-07-07 14:41:37 +0300 |
commit | 06e5c21a835c0e923506c4ff27929f34e00761c2 (patch) | |
tree | 75efcbc6854ef9bd476eb8bf00cc5c900da436a2 /contrib/libs/grpc-java/compiler/src/java_plugin/cpp/java_plugin.cpp | |
parent | 03f024c4412e3aa613bb543cf1660176320ba8f4 (diff) | |
download | ydb-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.cpp | 89 |
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); +} |