浏览代码

Merge pull request #2810 from xfxyjwf/i1994

Avoid redundant type casts for oneof bytes fields.
Feng Xiao 8 年之前
父节点
当前提交
8e465dcf46
共有 1 个文件被更改,包括 22 次插入4 次删除
  1. 22 4
      src/google/protobuf/compiler/java/java_primitive_field.cc

+ 22 - 4
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");
 }