diff options
author | Jisi Liu <jisi.liu@gmail.com> | 2015-02-18 16:39:01 -0800 |
---|---|---|
committer | Jisi Liu <jisi.liu@gmail.com> | 2015-02-19 16:43:08 -0800 |
commit | 7b72a24a2038dcb3409bb91d90f5a06abac3959c (patch) | |
tree | 41a702e329f6f709b49f20d40a9c23a08dcd2b73 /src/google/protobuf/compiler/javanano/javanano_field.cc | |
parent | b9e9469b4d7d81878c6bfd326cc6351abdbaf1d5 (diff) |
fix equal and hash for bytes field for javanano oneof
Diffstat (limited to 'src/google/protobuf/compiler/javanano/javanano_field.cc')
-rw-r--r-- | src/google/protobuf/compiler/javanano/javanano_field.cc | 54 |
1 files changed, 38 insertions, 16 deletions
diff --git a/src/google/protobuf/compiler/javanano/javanano_field.cc b/src/google/protobuf/compiler/javanano/javanano_field.cc index 07517567..e40db620 100644 --- a/src/google/protobuf/compiler/javanano/javanano_field.cc +++ b/src/google/protobuf/compiler/javanano/javanano_field.cc @@ -168,26 +168,48 @@ void SetCommonOneofVariables(const FieldDescriptor* descriptor, SimpleItoa(descriptor->number()); } -void GenerateOneofFieldEquals(const map<string, string>& variables, +void GenerateOneofFieldEquals(const FieldDescriptor* descriptor, + const map<string, string>& 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"); - + if (GetJavaType(descriptor) == JAVATYPE_BYTES) { + printer->Print(variables, + "if (this.has$capitalized_name$()) {\n" + " if (!other.has$capitalized_name$() ||\n" + " !java.util.Arrays.equals((byte[]) this.$oneof_name$_,\n" + " (byte[]) other.$oneof_name$_)) {\n" + " return false;\n" + " }\n" + "} else {\n" + " if (other.has$capitalized_name$()) {\n" + " return false;\n" + " }\n" + "}\n"); + } else { + 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<string, string>& variables, +void GenerateOneofFieldHashCode(const FieldDescriptor* descriptor, + const map<string, string>& variables, io::Printer* printer) { - printer->Print(variables, - "result = 31 * result +\n" - " ($has_oneof_case$ ? this.$oneof_name$_.hashCode() : 0);\n"); + if (GetJavaType(descriptor) == JAVATYPE_BYTES) { + printer->Print(variables, + "result = 31 * result + ($has_oneof_case$\n" + " ? java.util.Arrays.hashCode((byte[]) this.$oneof_name$_) : 0);\n"); + } else { + printer->Print(variables, + "result = 31 * result +\n" + " ($has_oneof_case$ ? this.$oneof_name$_.hashCode() : 0);\n"); + } } } // namespace javanano |