diff options
author | Jon Skeet <jonskeet@google.com> | 2017-10-24 14:14:15 +0100 |
---|---|---|
committer | Jon Skeet <skeet@pobox.com> | 2017-10-31 17:11:40 -0700 |
commit | cbe250591fca9d2e776776be065a72c5550a5556 (patch) | |
tree | b9b6b3de8fe8af9aaa9238b40611bf09f8f87b65 /src/google/protobuf/compiler/csharp/csharp_message.cc | |
parent | 6dd82243932e929331f3808742b191c85a353461 (diff) |
Fix merging with message-valued oneof
If messages A and B have the same oneof case, which is a message
type, and we merge B into A, those sub-messages should be merged.
Fixes #3200.
Note that I haven't regenerated all the code, as some of the protos
have been changed, breaking generation.
Diffstat (limited to 'src/google/protobuf/compiler/csharp/csharp_message.cc')
-rw-r--r-- | src/google/protobuf/compiler/csharp/csharp_message.cc | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/google/protobuf/compiler/csharp/csharp_message.cc b/src/google/protobuf/compiler/csharp/csharp_message.cc index 5ef0e4e8..ad9f8a16 100644 --- a/src/google/protobuf/compiler/csharp/csharp_message.cc +++ b/src/google/protobuf/compiler/csharp/csharp_message.cc @@ -463,9 +463,12 @@ void MessageGenerator::GenerateMergingMethods(io::Printer* printer) { vars["field_property_name"] = GetPropertyName(field); printer->Print( vars, - "case $property_name$OneofCase.$field_property_name$:\n" - " $field_property_name$ = other.$field_property_name$;\n" - " break;\n"); + "case $property_name$OneofCase.$field_property_name$:\n"); + printer->Indent(); + scoped_ptr<FieldGeneratorBase> generator(CreateFieldGeneratorInternal(field)); + generator->GenerateMergingCode(printer); + printer->Print("break;\n"); + printer->Outdent(); } printer->Outdent(); printer->Print("}\n\n"); |