Support import_prefix cmdline param

This commit is contained in:
iamqizhao 2015-02-03 17:26:15 -08:00
Родитель afe57a6648
Коммит 0f6fd6e2c3
6 изменённых файлов: 21 добавлений и 5 удалений

Просмотреть файл

@ -547,6 +547,7 @@ void PrintMessageImports(
google::protobuf::io::Printer* printer,
const google::protobuf::FileDescriptor* file,
map<string, string>* vars,
const string& import_prefix,
set<string>* imports,
map<string, string>* import_alias) {
set<const google::protobuf::FileDescriptor*> descs;
@ -581,14 +582,15 @@ void PrintMessageImports(
if (import_alias->find(import) != import_alias->end()) {
import_path += (*import_alias)[import] + " ";
}
import_path += "\"" + import + "\"";
import_path += "\"" + import_prefix + import + "\"";
printer->Print(import_path.c_str());
printer->Print("\n");
}
printer->Print("\n");
}
string GetServices(const google::protobuf::FileDescriptor* file) {
string GetServices(const google::protobuf::FileDescriptor* file,
vector<pair<string, string> >& options) {
string output;
google::protobuf::io::StringOutputStream output_stream(&output);
google::protobuf::io::Printer printer(&output_stream, '$');
@ -612,7 +614,15 @@ string GetServices(const google::protobuf::FileDescriptor* file) {
"\tproto \"github.com/golang/protobuf/proto\"\n"
")\n\n");
PrintMessageImports(&printer, file, &vars, &imports, &import_alias);
// TODO(zhaoq): Support other command line parameters supported by
// the protoc-gen-go plugin.
string import_prefix = "";
for (auto& p : options) {
if (p.first == "import_prefix") {
import_prefix = p.second;
}
}
PrintMessageImports(&printer, file, &vars, import_prefix, &imports, &import_alias);
// $Package$ is used to fully qualify method names.
vars["Package"] = file->package();

Просмотреть файл

@ -35,6 +35,9 @@
#define NET_GRPC_COMPILER_GO_GENERATOR_H_
#include <string>
#include <vector>
using namespace std;
namespace google {
namespace protobuf {
@ -44,7 +47,8 @@ class FileDescriptor;
namespace grpc_go_generator {
std::string GetServices(const google::protobuf::FileDescriptor* file);
string GetServices(const google::protobuf::FileDescriptor* file,
vector<std::pair<string, string> >& options);
} // namespace grpc_go_generator

Двоичные данные
rpc/compiler/go_generator.o Normal file

Двоичный файл не отображается.

Двоичные данные
rpc/compiler/go_plugin Executable file

Двоичный файл не отображается.

Просмотреть файл

@ -73,10 +73,12 @@ class GoGrpcGenerator : public google::protobuf::compiler::CodeGenerator {
return false;
}
vector<pair<string, string> > options;
google::protobuf::compiler::ParseGeneratorParameter(parameter, &options);
unique_ptr<google::protobuf::io::ZeroCopyOutputStream> output(
context->Open(file_name));
google::protobuf::io::CodedOutputStream coded_out(output.get());
string code = grpc_go_generator::GetServices(file);
string code = grpc_go_generator::GetServices(file, options);
coded_out.WriteRaw(code.data(), code.size());
return true;
}

Двоичные данные
rpc/compiler/go_plugin.o Normal file

Двоичный файл не отображается.