diff options
author | Nickolay Mazurkin <mazurkin@gmail.com> | 2016-09-18 10:38:18 +0300 |
---|---|---|
committer | Nickolay Mazurkin <mazurkin@gmail.com> | 2016-09-18 15:48:08 +0300 |
commit | aba6f7ef6703d72eda3d063dc2e6566d84f080a5 (patch) | |
tree | 7f49320e07120b3931b8ee59470495001b6e1a61 /src/google/protobuf/compiler/java/java_message_field.cc | |
parent | c44ca26fe89ed8a81d3ee475a2ccc1797141dbce (diff) | |
download | protobuf-aba6f7ef6703d72eda3d063dc2e6566d84f080a5.tar.gz protobuf-aba6f7ef6703d72eda3d063dc2e6566d84f080a5.tar.bz2 protobuf-aba6f7ef6703d72eda3d063dc2e6566d84f080a5.zip |
[issue-2108] [protoc/java] Excessive copying on buildPartial()
Diffstat (limited to 'src/google/protobuf/compiler/java/java_message_field.cc')
-rw-r--r-- | src/google/protobuf/compiler/java/java_message_field.cc | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/google/protobuf/compiler/java/java_message_field.cc b/src/google/protobuf/compiler/java/java_message_field.cc index c9865dda..70b5f629 100644 --- a/src/google/protobuf/compiler/java/java_message_field.cc +++ b/src/google/protobuf/compiler/java/java_message_field.cc @@ -251,7 +251,7 @@ GenerateBuilderMembers(io::Printer* printer) const { bool support_field_presence = SupportFieldPresence(descriptor_->file()); printer->Print(variables_, - "private $type$ $name$_ = null;\n"); + "private $type$ $name$_;\n"); printer->Print(variables_, // If this builder is non-null, it is used and the other fields are @@ -434,15 +434,20 @@ void ImmutableMessageFieldGenerator:: GenerateBuildingCode(io::Printer* printer) const { if (SupportFieldPresence(descriptor_->file())) { printer->Print(variables_, - "if ($get_has_field_bit_from_local$) {\n" - " $set_has_field_bit_to_local$;\n" - "}\n"); + "if ($get_has_field_bit_from_local$) {\n"); + printer->Indent(); + PrintNestedBuilderCondition(printer, + "result.$name$_ = $name$_;\n", + "result.$name$_ = $name$Builder_.build();\n"); + printer->Outdent(); + printer->Print(variables_, + " $set_has_field_bit_to_local$;\n" + "}\n"); + } else { + PrintNestedBuilderCondition(printer, + "result.$name$_ = $name$_;\n", + "result.$name$_ = $name$Builder_.build();\n"); } - - PrintNestedBuilderCondition(printer, - "result.$name$_ = $name$_;\n", - - "result.$name$_ = $name$Builder_.build();\n"); } void ImmutableMessageFieldGenerator:: |