From f173cdeb02618c117947bbed2646609f6101390e Mon Sep 17 00:00:00 2001 From: Jisi Liu Date: Wed, 18 Feb 2015 13:47:22 -0800 Subject: hashcode and equals for oneofs in nano. --- .../protobuf/compiler/javanano/javanano_field.cc | 22 ++++++++++++++++++++++ .../protobuf/compiler/javanano/javanano_field.h | 4 ++++ .../compiler/javanano/javanano_message_field.cc | 12 ++---------- .../compiler/javanano/javanano_primitive_field.cc | 8 ++++++-- 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/google/protobuf/compiler/javanano/javanano_field.cc b/src/google/protobuf/compiler/javanano/javanano_field.cc index 5565781c..07517567 100644 --- a/src/google/protobuf/compiler/javanano/javanano_field.cc +++ b/src/google/protobuf/compiler/javanano/javanano_field.cc @@ -168,6 +168,28 @@ void SetCommonOneofVariables(const FieldDescriptor* descriptor, SimpleItoa(descriptor->number()); } +void GenerateOneofFieldEquals(const map& variables, + io::Printer* printer) { + printer->Print(variables, + "if (this.has$capitalized_name$()) {\n" + " if (!this.$oneof_name$_.equals(other.$oneof_name$_)) {\n" + " return false;\n" + " }\n" + "} else {\n" + " if (other.has$capitalized_name$()) {\n" + " return false;\n" + " }\n" + "}\n"); + +} + +void GenerateOneofFieldHashCode(const map& variables, + io::Printer* printer) { + printer->Print(variables, + "result = 31 * result +\n" + " ($has_oneof_case$ ? this.$oneof_name$_.hashCode() : 0);\n"); +} + } // namespace javanano } // namespace compiler } // namespace protobuf diff --git a/src/google/protobuf/compiler/javanano/javanano_field.h b/src/google/protobuf/compiler/javanano/javanano_field.h index fae79ce4..b31b517b 100644 --- a/src/google/protobuf/compiler/javanano/javanano_field.h +++ b/src/google/protobuf/compiler/javanano/javanano_field.h @@ -114,6 +114,10 @@ class FieldGeneratorMap { void SetCommonOneofVariables(const FieldDescriptor* descriptor, map* variables); +void GenerateOneofFieldEquals(const map& variables, + io::Printer* printer); +void GenerateOneofFieldHashCode(const map& variables, + io::Printer* printer); } // namespace javanano } // namespace compiler diff --git a/src/google/protobuf/compiler/javanano/javanano_message_field.cc b/src/google/protobuf/compiler/javanano/javanano_message_field.cc index 527121e6..6e12bf63 100644 --- a/src/google/protobuf/compiler/javanano/javanano_message_field.cc +++ b/src/google/protobuf/compiler/javanano/javanano_message_field.cc @@ -214,20 +214,12 @@ GenerateSerializedSizeCode(io::Printer* printer) const { void MessageOneofFieldGenerator:: GenerateEqualsCode(io::Printer* printer) const { - printer->Print(variables_, - "if (this.has$capitalized_name$()) {\n" - " if (!this.$oneof_name$_.equals(other.$oneof_name$_)) {\n" - " return false;\n" - " }\n" - "} else {\n" - " if (other.has$capitalized_name$()) {\n" - " return false;\n" - " }\n" - "}\n"); + GenerateOneofFieldEquals(variables_, printer); } void MessageOneofFieldGenerator:: GenerateHashCodeCode(io::Printer* printer) const { + GenerateOneofFieldHashCode(variables_, printer); } // =================================================================== diff --git a/src/google/protobuf/compiler/javanano/javanano_primitive_field.cc b/src/google/protobuf/compiler/javanano/javanano_primitive_field.cc index 4bbaec82..038db6e2 100644 --- a/src/google/protobuf/compiler/javanano/javanano_primitive_field.cc +++ b/src/google/protobuf/compiler/javanano/javanano_primitive_field.cc @@ -765,10 +765,14 @@ void PrimitiveOneofFieldGenerator::GenerateSerializedSizeCode( "}\n"); } -void PrimitiveOneofFieldGenerator::GenerateEqualsCode(io::Printer* printer) const { +void PrimitiveOneofFieldGenerator::GenerateEqualsCode( + io::Printer* printer) const { + GenerateOneofFieldEquals(variables_, printer); } -void PrimitiveOneofFieldGenerator::GenerateHashCodeCode(io::Printer* printer) const { +void PrimitiveOneofFieldGenerator::GenerateHashCodeCode( + io::Printer* printer) const { + GenerateOneofFieldHashCode(variables_, printer); } // =================================================================== -- cgit v1.2.3