Include the oneof-case in equality and hash code generated code.
The included C# test will fail until the regenerated code is used, which is in the next commit.
This commit is contained in:
parent
1abf297fb9
commit
964627ece0
2 changed files with 18 additions and 0 deletions
|
@ -565,6 +565,16 @@ namespace Google.Protobuf
|
|||
Assert.AreEqual(TestAllTypes.OneofFieldOneofCase.None, message.OneofFieldCase);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Oneof_DefaultValuesNotEqual()
|
||||
{
|
||||
var message1 = new TestAllTypes { OneofString = "" };
|
||||
var message2 = new TestAllTypes { OneofUint32 = 0 };
|
||||
Assert.AreEqual(TestAllTypes.OneofFieldOneofCase.OneofString, message1.OneofFieldCase);
|
||||
Assert.AreEqual(TestAllTypes.OneofFieldOneofCase.OneofUint32, message2.OneofFieldCase);
|
||||
Assert.AreNotEqual(message1, message2);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void OneofSerialization_NonDefaultValue()
|
||||
{
|
||||
|
|
|
@ -323,6 +323,10 @@ void MessageGenerator::GenerateFrameworkMethods(io::Printer* printer) {
|
|||
CreateFieldGeneratorInternal(descriptor_->field(i)));
|
||||
generator->WriteEquals(printer);
|
||||
}
|
||||
for (int i = 0; i < descriptor_->oneof_decl_count(); i++) {
|
||||
printer->Print("if ($property_name$Case != other.$property_name$Case) return false;\n",
|
||||
"property_name", UnderscoresToCamelCase(descriptor_->oneof_decl(i)->name(), true));
|
||||
}
|
||||
printer->Outdent();
|
||||
printer->Print(
|
||||
" return true;\n"
|
||||
|
@ -339,6 +343,10 @@ void MessageGenerator::GenerateFrameworkMethods(io::Printer* printer) {
|
|||
CreateFieldGeneratorInternal(descriptor_->field(i)));
|
||||
generator->WriteHash(printer);
|
||||
}
|
||||
for (int i = 0; i < descriptor_->oneof_decl_count(); i++) {
|
||||
printer->Print("hash ^= (int) $name$Case_;\n",
|
||||
"name", UnderscoresToCamelCase(descriptor_->oneof_decl(i)->name(), false));
|
||||
}
|
||||
printer->Print("return hash;\n");
|
||||
printer->Outdent();
|
||||
printer->Print("}\n\n");
|
||||
|
|
Loading…
Add table
Reference in a new issue