Commit aba6f7ef authored by Nickolay Mazurkin's avatar Nickolay Mazurkin

[issue-2108] [protoc/java] Excessive copying on buildPartial()

parent c44ca26f
...@@ -292,11 +292,15 @@ GenerateBuildingCode(io::Printer* printer) const { ...@@ -292,11 +292,15 @@ GenerateBuildingCode(io::Printer* printer) const {
if (SupportFieldPresence(descriptor_->file())) { if (SupportFieldPresence(descriptor_->file())) {
printer->Print(variables_, printer->Print(variables_,
"if ($get_has_field_bit_from_local$) {\n" "if ($get_has_field_bit_from_local$) {\n"
" result.$name$_ = $name$_;\n"
" $set_has_field_bit_to_local$;\n" " $set_has_field_bit_to_local$;\n"
"} else {\n"
" result.$name$_ = $default_number$;\n"
"}\n"); "}\n");
} else {
printer->Print(variables_,
"result.$name$_ = $name$_;\n");
} }
printer->Print(variables_,
"result.$name$_ = $name$_;\n");
} }
void ImmutableEnumFieldGenerator:: void ImmutableEnumFieldGenerator::
......
...@@ -233,12 +233,9 @@ void ImmutableLazyMessageFieldGenerator:: ...@@ -233,12 +233,9 @@ void ImmutableLazyMessageFieldGenerator::
GenerateBuildingCode(io::Printer* printer) const { GenerateBuildingCode(io::Printer* printer) const {
printer->Print(variables_, printer->Print(variables_,
"if ($get_has_field_bit_from_local$) {\n" "if ($get_has_field_bit_from_local$) {\n"
" result.$name$_.set($name$_);\n"
" $set_has_field_bit_to_local$;\n" " $set_has_field_bit_to_local$;\n"
"}\n"); "}\n");
printer->Print(variables_,
"result.$name$_.set(\n"
" $name$_);\n");
} }
void ImmutableLazyMessageFieldGenerator:: void ImmutableLazyMessageFieldGenerator::
......
...@@ -251,7 +251,7 @@ GenerateBuilderMembers(io::Printer* printer) const { ...@@ -251,7 +251,7 @@ GenerateBuilderMembers(io::Printer* printer) const {
bool support_field_presence = SupportFieldPresence(descriptor_->file()); bool support_field_presence = SupportFieldPresence(descriptor_->file());
printer->Print(variables_, printer->Print(variables_,
"private $type$ $name$_ = null;\n"); "private $type$ $name$_;\n");
printer->Print(variables_, printer->Print(variables_,
// If this builder is non-null, it is used and the other fields are // If this builder is non-null, it is used and the other fields are
...@@ -434,15 +434,20 @@ void ImmutableMessageFieldGenerator:: ...@@ -434,15 +434,20 @@ void ImmutableMessageFieldGenerator::
GenerateBuildingCode(io::Printer* printer) const { GenerateBuildingCode(io::Printer* printer) const {
if (SupportFieldPresence(descriptor_->file())) { if (SupportFieldPresence(descriptor_->file())) {
printer->Print(variables_, printer->Print(variables_,
"if ($get_has_field_bit_from_local$) {\n" "if ($get_has_field_bit_from_local$) {\n");
" $set_has_field_bit_to_local$;\n" printer->Indent();
"}\n"); 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:: void ImmutableMessageFieldGenerator::
......
...@@ -257,7 +257,9 @@ GenerateFieldBuilderInitializationCode(io::Printer* printer) const { ...@@ -257,7 +257,9 @@ GenerateFieldBuilderInitializationCode(io::Printer* printer) const {
void ImmutablePrimitiveFieldGenerator:: void ImmutablePrimitiveFieldGenerator::
GenerateInitializationCode(io::Printer* printer) const { GenerateInitializationCode(io::Printer* printer) const {
printer->Print(variables_, "$name$_ = $default$;\n"); if (!IsDefaultValueJavaDefault(descriptor_)) {
printer->Print(variables_, "$name$_ = $default$;\n");
}
} }
void ImmutablePrimitiveFieldGenerator:: void ImmutablePrimitiveFieldGenerator::
...@@ -287,11 +289,21 @@ GenerateBuildingCode(io::Printer* printer) const { ...@@ -287,11 +289,21 @@ GenerateBuildingCode(io::Printer* printer) const {
if (SupportFieldPresence(descriptor_->file())) { if (SupportFieldPresence(descriptor_->file())) {
printer->Print(variables_, printer->Print(variables_,
"if ($get_has_field_bit_from_local$) {\n" "if ($get_has_field_bit_from_local$) {\n"
" $set_has_field_bit_to_local$;\n" " result.$name$_ = $name$_;\n"
"}\n"); " $set_has_field_bit_to_local$;\n");
if (IsDefaultValueJavaDefault(descriptor_)) {
printer->Print(variables_,
"}\n");
} else {
printer->Print(variables_,
"} else {\n"
" result.$name$_ = $default$;\n"
"}\n");
}
} else {
printer->Print(variables_,
"result.$name$_ = $name$_;\n");
} }
printer->Print(variables_,
"result.$name$_ = $name$_;\n");
} }
void ImmutablePrimitiveFieldGenerator:: void ImmutablePrimitiveFieldGenerator::
......
...@@ -395,11 +395,15 @@ GenerateBuildingCode(io::Printer* printer) const { ...@@ -395,11 +395,15 @@ GenerateBuildingCode(io::Printer* printer) const {
if (SupportFieldPresence(descriptor_->file())) { if (SupportFieldPresence(descriptor_->file())) {
printer->Print(variables_, printer->Print(variables_,
"if ($get_has_field_bit_from_local$) {\n" "if ($get_has_field_bit_from_local$) {\n"
" result.$name$_ = $name$_;\n"
" $set_has_field_bit_to_local$;\n" " $set_has_field_bit_to_local$;\n"
"} else {\n"
" result.$name$_ = $default$;\n"
"}\n"); "}\n");
} else {
printer->Print(variables_,
"result.$name$_ = $name$_;\n");
} }
printer->Print(variables_,
"result.$name$_ = $name$_;\n");
} }
void ImmutableStringFieldGenerator:: void ImmutableStringFieldGenerator::
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment