diff options
author | Feng Xiao <xfxyjwf@gmail.com> | 2017-03-09 13:57:34 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-09 13:57:34 -0800 |
commit | 8e465dcf467beb92549e6d987e5dc3683b718f58 (patch) | |
tree | 58b75af9afe75ac8a7cc72328a882f67f58d8042 /src | |
parent | af2d5f5ad3808b38ea58c9880be1b81fd2a89278 (diff) | |
parent | c31154316bbf9b7f12e3ae24c326dc6834604ba9 (diff) | |
download | protobuf-8e465dcf467beb92549e6d987e5dc3683b718f58.tar.gz protobuf-8e465dcf467beb92549e6d987e5dc3683b718f58.tar.bz2 protobuf-8e465dcf467beb92549e6d987e5dc3683b718f58.zip |
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.cc | 26 |
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"); } |