hashcode and equals for oneofs in nano.

This commit is contained in:
Jisi Liu 2015-02-18 13:47:22 -08:00
parent 06a2e29855
commit f173cdeb02
4 changed files with 34 additions and 12 deletions

View File

@ -168,6 +168,28 @@ void SetCommonOneofVariables(const FieldDescriptor* descriptor,
SimpleItoa(descriptor->number());
}
void GenerateOneofFieldEquals(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");
}
void GenerateOneofFieldHashCode(const map<string, string>& 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

View File

@ -114,6 +114,10 @@ class FieldGeneratorMap {
void SetCommonOneofVariables(const FieldDescriptor* descriptor,
map<string, string>* variables);
void GenerateOneofFieldEquals(const map<string, string>& variables,
io::Printer* printer);
void GenerateOneofFieldHashCode(const map<string, string>& variables,
io::Printer* printer);
} // namespace javanano
} // namespace compiler

View File

@ -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);
}
// ===================================================================

View File

@ -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);
}
// ===================================================================