aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Feng Xiao <xfxyjwf@gmail.com>2017-03-09 13:57:34 -0800
committerGravatar GitHub <noreply@github.com>2017-03-09 13:57:34 -0800
commit8e465dcf467beb92549e6d987e5dc3683b718f58 (patch)
tree58b75af9afe75ac8a7cc72328a882f67f58d8042 /src
parentaf2d5f5ad3808b38ea58c9880be1b81fd2a89278 (diff)
parentc31154316bbf9b7f12e3ae24c326dc6834604ba9 (diff)
Merge pull request #2810 from xfxyjwf/i1994
Avoid redundant type casts for oneof bytes fields.
Diffstat (limited to 'src')
-rw-r--r--src/google/protobuf/compiler/java/java_primitive_field.cc26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/google/protobuf/compiler/java/java_primitive_field.cc b/src/google/protobuf/compiler/java/java_primitive_field.cc
index fa1047e8..840252e7 100644
--- a/src/google/protobuf/compiler/java/java_primitive_field.cc
+++ b/src/google/protobuf/compiler/java/java_primitive_field.cc
@@ -523,8 +523,17 @@ void ImmutablePrimitiveOneofFieldGenerator::
GenerateSerializationCode(io::Printer* printer) const {
printer->Print(variables_,
"if ($has_oneof_case_message$) {\n"
- " output.write$capitalized_type$(\n"
- " $number$, ($type$)(($boxed_type$) $oneof_name$_));\n"
+ " output.write$capitalized_type$(\n");
+ // $type$ and $boxed_type$ is the same for bytes fields so we don't need to
+ // do redundant casts.
+ if (GetJavaType(descriptor_) == JAVATYPE_BYTES) {
+ printer->Print(variables_,
+ " $number$, ($type$) $oneof_name$_);\n");
+ } else {
+ printer->Print(variables_,
+ " $number$, ($type$)(($boxed_type$) $oneof_name$_));\n");
+ }
+ printer->Print(
"}\n");
}
@@ -533,8 +542,17 @@ GenerateSerializedSizeCode(io::Printer* printer) const {
printer->Print(variables_,
"if ($has_oneof_case_message$) {\n"
" size += com.google.protobuf.CodedOutputStream\n"
- " .compute$capitalized_type$Size(\n"
- " $number$, ($type$)(($boxed_type$) $oneof_name$_));\n"
+ " .compute$capitalized_type$Size(\n");
+ // $type$ and $boxed_type$ is the same for bytes fields so we don't need to
+ // do redundant casts.
+ if (GetJavaType(descriptor_) == JAVATYPE_BYTES) {
+ printer->Print(variables_,
+ " $number$, ($type$) $oneof_name$_);\n");
+ } else {
+ printer->Print(variables_,
+ " $number$, ($type$)(($boxed_type$) $oneof_name$_));\n");
+ }
+ printer->Print(
"}\n");
}