diff options
4 files changed, 23 insertions, 4 deletions
diff --git a/src/google/protobuf/compiler/javanano/javanano_enum_field.cc b/src/google/protobuf/compiler/javanano/javanano_enum_field.cc index 6a18834..8a59d32 100644 --- a/src/google/protobuf/compiler/javanano/javanano_enum_field.cc +++ b/src/google/protobuf/compiler/javanano/javanano_enum_field.cc @@ -59,6 +59,7 @@ void SetEnumVariables(const Params& params, RenameJavaKeywords(UnderscoresToCapitalizedCamelCase(descriptor)); (*variables)["number"] = SimpleItoa(descriptor->number()); if (params.use_reference_types_for_primitives() + && !params.reftypes_primitive_enums() && !descriptor->is_repeated()) { (*variables)["type"] = "java.lang.Integer"; (*variables)["default"] = "null"; @@ -197,7 +198,8 @@ GenerateSerializedSizeCode(io::Printer* printer) const { } void EnumFieldGenerator::GenerateEqualsCode(io::Printer* printer) const { - if (params_.use_reference_types_for_primitives()) { + if (params_.use_reference_types_for_primitives() + && !params_.reftypes_primitive_enums()) { printer->Print(variables_, "if (this.$name$ == null) {\n" " if (other.$name$ != null) {\n" @@ -228,7 +230,8 @@ void EnumFieldGenerator::GenerateEqualsCode(io::Printer* printer) const { void EnumFieldGenerator::GenerateHashCodeCode(io::Printer* printer) const { printer->Print( "result = 31 * result + "); - if (params_.use_reference_types_for_primitives()) { + if (params_.use_reference_types_for_primitives() + && !params_.reftypes_primitive_enums()) { printer->Print(variables_, "(this.$name$ == null ? 0 : this.$name$)"); } else { diff --git a/src/google/protobuf/compiler/javanano/javanano_generator.cc b/src/google/protobuf/compiler/javanano/javanano_generator.cc index 61ef2ca..1936e45 100644 --- a/src/google/protobuf/compiler/javanano/javanano_generator.cc +++ b/src/google/protobuf/compiler/javanano/javanano_generator.cc @@ -139,7 +139,10 @@ bool JavaNanoGenerator::Generate(const FileDescriptor* file, params.set_java_enum_style(option_value == "java"); } else if (option_name == "optional_field_style") { params.set_optional_field_accessors(option_value == "accessors"); - params.set_use_reference_types_for_primitives(option_value == "reftypes"); + params.set_use_reference_types_for_primitives(option_value == "reftypes" + || option_value == "reftypes_primitive_enums"); + params.set_reftypes_primitive_enums( + option_value == "reftypes_primitive_enums"); } else if (option_name == "generate_equals") { params.set_generate_equals(option_value == "true"); } else if (option_name == "ignore_services") { diff --git a/src/google/protobuf/compiler/javanano/javanano_helpers.cc b/src/google/protobuf/compiler/javanano/javanano_helpers.cc index bf88f25..2149418 100644 --- a/src/google/protobuf/compiler/javanano/javanano_helpers.cc +++ b/src/google/protobuf/compiler/javanano/javanano_helpers.cc @@ -392,6 +392,10 @@ string DefaultValue(const Params& params, const FieldDescriptor* field) { } if (params.use_reference_types_for_primitives()) { + if (params.reftypes_primitive_enums() + && field->cpp_type() == FieldDescriptor::CPPTYPE_ENUM) { + return "Integer.MIN_VALUE"; + } return "null"; } diff --git a/src/google/protobuf/compiler/javanano/javanano_params.h b/src/google/protobuf/compiler/javanano/javanano_params.h index d0626a2..1512b4c 100644 --- a/src/google/protobuf/compiler/javanano/javanano_params.h +++ b/src/google/protobuf/compiler/javanano/javanano_params.h @@ -64,6 +64,7 @@ class Params { bool generate_equals_; bool ignore_services_; bool parcelable_messages_; + bool reftypes_primitive_enums_; public: Params(const string & base_name) : @@ -77,7 +78,8 @@ class Params { use_reference_types_for_primitives_(false), generate_equals_(false), ignore_services_(false), - parcelable_messages_(false) { + parcelable_messages_(false), + reftypes_primitive_enums_(false) { } const string& base_name() const { @@ -213,6 +215,13 @@ class Params { bool parcelable_messages() const { return parcelable_messages_; } + + void set_reftypes_primitive_enums(bool value) { + reftypes_primitive_enums_ = value; + } + bool reftypes_primitive_enums() const { + return reftypes_primitive_enums_; + } }; } // namespace javanano |