mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-10 07:06:26 +00:00
grpc bindings generator for Java and a few minor supporting changes i… (#4553)
* grpc bindings generator for Java and a few minor supporting changes in improvements * restored formatting before my previous changes for ease of review * Fixed grpc java code generation bug resulting in duplicate extractor declarations in case the same is used in more than a single RPC method
This commit is contained in:
committed by
Wouter van Oortmerssen
parent
61f4a46c43
commit
8518b3fb4e
@@ -18,7 +18,8 @@
|
||||
|
||||
#include <list>
|
||||
|
||||
#define FLATC_VERSION "1.8.0 (" __DATE__ ")"
|
||||
#define FLATC_VERSION "1.8.0 (" __DATE__ " " __TIME__ ")"
|
||||
|
||||
|
||||
namespace flatbuffers {
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ int main(int argc, const char *argv[]) {
|
||||
"Generate Go files for tables/structs",
|
||||
flatbuffers::GeneralMakeRule },
|
||||
{ flatbuffers::GenerateGeneral, "-j", "--java", "Java", true,
|
||||
nullptr,
|
||||
flatbuffers::GenerateJavaGRPC,
|
||||
flatbuffers::IDLOptions::kJava,
|
||||
"Generate Java classes for tables/structs",
|
||||
flatbuffers::GeneralMakeRule },
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
#include "src/compiler/cpp_generator.h"
|
||||
#include "src/compiler/go_generator.h"
|
||||
#include "src/compiler/java_generator.h"
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(push)
|
||||
@@ -53,7 +54,7 @@ class FlatBufMethod : public grpc_generator::Method {
|
||||
return "";
|
||||
}
|
||||
std::vector<grpc::string> GetAllComments() const {
|
||||
return std::vector<grpc::string>();
|
||||
return method_->rpc_comment;
|
||||
}
|
||||
|
||||
std::string name() const { return method_->name; }
|
||||
@@ -110,7 +111,7 @@ class FlatBufService : public grpc_generator::Service {
|
||||
return "";
|
||||
}
|
||||
std::vector<grpc::string> GetAllComments() const {
|
||||
return std::vector<grpc::string>();
|
||||
return service_->doc_comment;
|
||||
}
|
||||
|
||||
std::string name() const { return service_->name; }
|
||||
@@ -187,7 +188,8 @@ class FlatBufFile : public grpc_generator::File {
|
||||
public:
|
||||
enum Language {
|
||||
kLanguageGo,
|
||||
kLanguageCpp
|
||||
kLanguageCpp,
|
||||
kLanguageJava
|
||||
};
|
||||
|
||||
FlatBufFile(
|
||||
@@ -229,6 +231,9 @@ class FlatBufFile : public grpc_generator::File {
|
||||
case kLanguageGo: {
|
||||
return "import \"github.com/google/flatbuffers/go\"";
|
||||
}
|
||||
case kLanguageJava: {
|
||||
return "import com.google.flatbuffers.grpc.FlatbuffersUtils;";
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
@@ -328,9 +333,50 @@ bool GenerateCppGRPC(const Parser &parser,
|
||||
source_code, false);
|
||||
}
|
||||
|
||||
class JavaGRPCGenerator : public flatbuffers::BaseGenerator {
|
||||
public:
|
||||
JavaGRPCGenerator(const Parser& parser, const std::string& path,
|
||||
const std::string& file_name)
|
||||
: BaseGenerator(parser, path, file_name, "", "." /*separator*/),
|
||||
parser_(parser),
|
||||
path_(path),
|
||||
file_name_(file_name) {}
|
||||
|
||||
bool generate() {
|
||||
FlatBufFile file(parser_, file_name_, FlatBufFile::kLanguageJava);
|
||||
grpc_java_generator::Parameters p;
|
||||
for (int i = 0; i < file.service_count(); i++) {
|
||||
auto service = file.service(i);
|
||||
const Definition* def = parser_.services_.vec[i];
|
||||
p.package_name =
|
||||
def->defined_namespace->GetFullyQualifiedName(""); // file.package();
|
||||
std::string output =
|
||||
grpc_java_generator::GenerateServiceSource(&file, service.get(), &p);
|
||||
std::string filename =
|
||||
NamespaceDir(*def->defined_namespace) + def->name + "Grpc.java";
|
||||
if (!flatbuffers::SaveFile(filename.c_str(), output, false)) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
protected:
|
||||
const Parser& parser_;
|
||||
const std::string &path_, &file_name_;
|
||||
};
|
||||
|
||||
bool GenerateJavaGRPC(const Parser& parser, const std::string& path,
|
||||
const std::string& file_name) {
|
||||
int nservices = 0;
|
||||
for (auto it = parser.services_.vec.begin(); it != parser.services_.vec.end();
|
||||
++it) {
|
||||
if (!(*it)->generated) nservices++;
|
||||
}
|
||||
if (!nservices) return true;
|
||||
return JavaGRPCGenerator(parser, path, file_name).generate();
|
||||
}
|
||||
|
||||
} // namespace flatbuffers
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1645,6 +1645,7 @@ CheckedError Parser::ParseService() {
|
||||
ECHECK(ParseMetaData(&service_def.attributes));
|
||||
EXPECT('{');
|
||||
do {
|
||||
std::vector<std::string> rpc_comment = doc_comment_;
|
||||
auto rpc_name = attribute_;
|
||||
EXPECT(kTokenIdentifier);
|
||||
EXPECT('(');
|
||||
@@ -1660,6 +1661,7 @@ CheckedError Parser::ParseService() {
|
||||
rpc.name = rpc_name;
|
||||
rpc.request = reqtype.struct_def;
|
||||
rpc.response = resptype.struct_def;
|
||||
rpc.rpc_comment = rpc_comment;
|
||||
if (service_def.calls.Add(rpc_name, &rpc))
|
||||
return Error("rpc already exists: " + rpc_name);
|
||||
ECHECK(ParseMetaData(&rpc.attributes));
|
||||
|
||||
Reference in New Issue
Block a user