From d9425a621844065d5a5535448ebe801bad2df56b Mon Sep 17 00:00:00 2001 From: Jie Dai Date: Mon, 21 Apr 2014 14:29:03 -0700 Subject: [PATCH] Adds --ignore_service nano proto compiler flag Nano proto compiler normally throws an error if any service is defined. If --ignore-services=true is set, no error is thrown and the service is simply skipped. Change-Id: Id82583555085cc55550d03a485d3f0189885240b --- java/README.txt | 8 ++++++++ .../protobuf/compiler/javanano/javanano_file.cc | 2 +- .../protobuf/compiler/javanano/javanano_generator.cc | 2 ++ .../protobuf/compiler/javanano/javanano_params.h | 11 ++++++++++- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/java/README.txt b/java/README.txt index f958d147d9..f922c4be8b 100644 --- a/java/README.txt +++ b/java/README.txt @@ -475,6 +475,7 @@ java_multiple_files -> true or false java_nano_generate_has -> true or false [DEPRECATED] optional_field_style -> default or accessors enum_style -> c or java +ignore_services -> true or false java_package: java_outer_classname: @@ -580,6 +581,13 @@ enum_style={c,java} (default: c) compiler inlines all referenced enum constants into the call sites, the interface remains unused and can be removed by ProGuard. +ignore_services={true,false} (default: false) + Skips services definitions. + + Nano doesn't support services. By default, if a service is defined + it will generate a compilation error. If this flag is set to true, + services will be silently ignored, instead. + To use nano protobufs within the Android repo: diff --git a/src/google/protobuf/compiler/javanano/javanano_file.cc b/src/google/protobuf/compiler/javanano/javanano_file.cc index bdc51c4e73..98586b4855 100644 --- a/src/google/protobuf/compiler/javanano/javanano_file.cc +++ b/src/google/protobuf/compiler/javanano/javanano_file.cc @@ -105,7 +105,7 @@ bool FileGenerator::Validate(string* error) { return false; } - if (file_->service_count() != 0) { + if (file_->service_count() != 0 && !params_.ignore_services()) { error->assign(file_->name()); error->append( ": Java NANO_RUNTIME does not support services\""); diff --git a/src/google/protobuf/compiler/javanano/javanano_generator.cc b/src/google/protobuf/compiler/javanano/javanano_generator.cc index d514dd866a..0e12103373 100644 --- a/src/google/protobuf/compiler/javanano/javanano_generator.cc +++ b/src/google/protobuf/compiler/javanano/javanano_generator.cc @@ -142,6 +142,8 @@ bool JavaNanoGenerator::Generate(const FileDescriptor* file, params.set_use_reference_types_for_primitives(option_value == "reftypes"); } else if (option_name == "generate_equals") { params.set_generate_equals(option_value == "true"); + } else if (option_name == "ignore_services") { + params.set_ignore_services(option_value == "true"); } else { *error = "Ignore unknown javanano generator option: " + option_name; } diff --git a/src/google/protobuf/compiler/javanano/javanano_params.h b/src/google/protobuf/compiler/javanano/javanano_params.h index 24aece3a60..889395e301 100644 --- a/src/google/protobuf/compiler/javanano/javanano_params.h +++ b/src/google/protobuf/compiler/javanano/javanano_params.h @@ -62,6 +62,7 @@ class Params { bool optional_field_accessors_; bool use_reference_types_for_primitives_; bool generate_equals_; + bool ignore_services_; public: Params(const string & base_name) : @@ -73,7 +74,8 @@ class Params { java_enum_style_(false), optional_field_accessors_(false), use_reference_types_for_primitives_(false), - generate_equals_(false) { + generate_equals_(false), + ignore_services_(false) { } const string& base_name() const { @@ -195,6 +197,13 @@ class Params { bool generate_equals() const { return generate_equals_; } + + void set_ignore_services(bool value) { + ignore_services_ = value; + } + bool ignore_services() const { + return ignore_services_; + } }; } // namespace javanano