|
@@ -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(
|