From 333d200a96b067dcc43f249d957cf1efd52bf592 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Mon, 13 Apr 2015 17:41:03 -0700 Subject: [PATCH] integrate CalcSerializedSize() fix from protobuf-csharp-port issue 84 --- .../protobuf/compiler/csharp/csharp_message.cc | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/google/protobuf/compiler/csharp/csharp_message.cc b/src/google/protobuf/compiler/csharp/csharp_message.cc index 66b8c2d5e0..f7c8ddfbb1 100644 --- a/src/google/protobuf/compiler/csharp/csharp_message.cc +++ b/src/google/protobuf/compiler/csharp/csharp_message.cc @@ -378,7 +378,7 @@ void MessageGenerator::GenerateMessageSerializationMethods(Writer* writer) { "public override void WriteTo(pb::ICodedOutputStream output) {"); writer->Indent(); // Make sure we've computed the serialized length, so that packed fields are generated correctly. - writer->WriteLine("int size = SerializedSize;"); + writer->WriteLine("CalcSerializedSize();"); writer->WriteLine("string[] field_names = _$0$FieldNames;", UnderscoresToCamelCase(class_name(), false)); if (descriptor_->extension_range_count()) { @@ -421,6 +421,17 @@ void MessageGenerator::GenerateMessageSerializationMethods(Writer* writer) { writer->Indent(); writer->WriteLine("int size = memoizedSerializedSize;"); writer->WriteLine("if (size != -1) return size;"); + writer->WriteLine("return CalcSerializedSize();"); + writer->Outdent(); + writer->WriteLine("}"); + writer->Outdent(); + writer->WriteLine("}"); + writer->WriteLine(); + + writer->WriteLine("private int CalcSerializedSize() {"); + writer->Indent(); + writer->WriteLine("int size = memoizedSerializedSize;"); + writer->WriteLine("if (size != -1) return size;"); writer->WriteLine(); writer->WriteLine("size = 0;"); for (int i = 0; i < descriptor_->field_count(); i++) { @@ -443,9 +454,6 @@ void MessageGenerator::GenerateMessageSerializationMethods(Writer* writer) { writer->WriteLine("return size;"); writer->Outdent(); writer->WriteLine("}"); - writer->Outdent(); - writer->WriteLine("}"); - writer->WriteLine(); } void MessageGenerator::GenerateSerializeOneField(