Эх сурвалжийг харах

am 7d1ca13f: Merge "Adds a primitive enum mode for reftypes."

* commit '7d1ca13f3781e8ccff0ecfab42250f1058c9152d':
  Adds a primitive enum mode for reftypes.
Brian Duff 11 жил өмнө
parent
commit
50a024fbe1

+ 5 - 2
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 {

+ 4 - 1
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") {

+ 4 - 0
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";
   }
 

+ 10 - 1
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