THRIFT-3946 Java 1.5 compatibility broken for binary fields (java5 option)
Client: Java
Patch: Philip Hamer
diff --git a/compiler/cpp/src/thrift/generate/t_java_generator.cc b/compiler/cpp/src/thrift/generate/t_java_generator.cc
index 4feb626..a45c676 100644
--- a/compiler/cpp/src/thrift/generate/t_java_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_java_generator.cc
@@ -447,8 +447,7 @@
+ "import java.util.HashMap;\n" + "import java.util.EnumMap;\n" + "import java.util.Set;\n"
+ "import java.util.HashSet;\n" + "import java.util.EnumSet;\n" + tree_set_and_map
+ "import java.util.Collections;\n" + "import java.util.BitSet;\n"
- + "import java.nio.ByteBuffer;\n"
- + "import java.util.Arrays;\n" + annotation_generated
+ + "import java.nio.ByteBuffer;\n" + annotation_generated
+ "import org.slf4j.Logger;\n" + "import org.slf4j.LoggerFactory;\n\n";
}
@@ -923,7 +922,7 @@
indent(out) << " " << type_name(tstruct) << " x = new " << type_name(tstruct) << "();"
<< endl;
indent(out) << " x.set" << get_cap_name((*m_iter)->get_name())
- << "(ByteBuffer.wrap(Arrays.copyOf(value, value.length)));" << endl;
+ << "(ByteBuffer.wrap(value.clone()));" << endl;
indent(out) << " return x;" << endl;
indent(out) << "}" << endl << endl;
}
@@ -1002,7 +1001,7 @@
indent(out) << "public void set" << get_cap_name(field->get_name()) << "(byte[] value) {"
<< endl;
indent(out) << " set" << get_cap_name(field->get_name())
- << "(ByteBuffer.wrap(Arrays.copyOf(value, value.length)));" << endl;
+ << "(ByteBuffer.wrap(value.clone()));" << endl;
indent(out) << "}" << endl;
out << endl;
@@ -2443,8 +2442,7 @@
}
out << " set" << cap_name << "(byte[] " << field_name << ") {" << endl;
indent(out) << " this." << field_name << " = " << field_name << " == null ? (ByteBuffer)null"
- << " : ByteBuffer.wrap(Arrays.copyOf(" << field_name << ", " << field_name
- << ".length));" << endl;
+ << " : ByteBuffer.wrap(" << field_name << ".clone());" << endl;
if (!bean_style_) {
indent(out) << " return this;" << endl;
}