You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by br...@apache.org on 2010/11/24 23:30:39 UTC

svn commit: r1038850 - in /thrift/trunk: compiler/cpp/src/generate/t_java_generator.cc lib/java/test/org/apache/thrift/TestStruct.java

Author: bryanduxbury
Date: Wed Nov 24 22:30:38 2010
New Revision: 1038850

URL: http://svn.apache.org/viewvc?rev=1038850&view=rev
Log:
THRIFT-1008. java: byte[] accessors throw NPE on unset field

Further extra null check in accessors that use TBaseHelper.rightSize().

Modified:
    thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
    thrift/trunk/lib/java/test/org/apache/thrift/TestStruct.java

Modified: thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
URL: http://svn.apache.org/viewvc/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc?rev=1038850&r1=1038849&r2=1038850&view=diff
==============================================================================
--- thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc (original)
+++ thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc Wed Nov 24 22:30:38 2010
@@ -807,7 +807,8 @@ void t_java_generator::generate_union_ge
     if (type->is_base_type() && ((t_base_type*)type)->is_binary()) {
       indent(out) << "public byte[] get" << cap_name << "() {" << endl;
       indent(out) << "  set" << cap_name << "(TBaseHelper.rightSize(buffer" << get_cap_name("for") << cap_name << "()));" << endl;
-      indent(out) << "  return buffer" << get_cap_name("for") << cap_name << "().array();" << endl;
+      indent(out) << "  ByteBuffer b = buffer" << get_cap_name("for") << cap_name << "();" << endl;
+      indent(out) << "  return b == null ? null : b.array();" << endl;
       indent(out) << "}" << endl;
 
       out << endl;
@@ -1889,7 +1890,7 @@ void t_java_generator::generate_java_bea
     if (type->is_base_type() && ((t_base_type*)type)->is_binary()) {
       indent(out) << "public byte[] get" << cap_name << "() {" << endl;
       indent(out) << "  set" << cap_name << "(TBaseHelper.rightSize(" << field_name << "));" << endl;
-      indent(out) << "  return " << field_name << ".array();" << endl;
+      indent(out) << "  return " << field_name << " == null ? null : " << field_name << ".array();" << endl;
       indent(out) << "}" << endl << endl;
 
       indent(out) << "public ByteBuffer buffer" << get_cap_name("for") << cap_name << "() {" << endl;
@@ -1920,7 +1921,7 @@ void t_java_generator::generate_java_bea
         out << type_name(tstruct);
       }
       out << " set" << cap_name << "(byte[] " << field_name << ") {" << endl;
-      indent(out) << "  set" << cap_name << "(ByteBuffer.wrap(" << field_name << "));" << endl;
+      indent(out) << "  set" << cap_name << "(" << field_name << " == null ? (ByteBuffer)null : ByteBuffer.wrap(" << field_name << "));" << endl;
       if (!bean_style_) {
         indent(out) << "  return this;" << endl;
       }

Modified: thrift/trunk/lib/java/test/org/apache/thrift/TestStruct.java
URL: http://svn.apache.org/viewvc/thrift/trunk/lib/java/test/org/apache/thrift/TestStruct.java?rev=1038850&r1=1038849&r2=1038850&view=diff
==============================================================================
--- thrift/trunk/lib/java/test/org/apache/thrift/TestStruct.java (original)
+++ thrift/trunk/lib/java/test/org/apache/thrift/TestStruct.java Wed Nov 24 22:30:38 2010
@@ -301,4 +301,12 @@ public class TestStruct extends TestCase
     assertEquals("JavaTestHelper(req_int:0, req_obj:, req_bin:)", 
         object.toString());
   }
+
+  public void testBytesBufferFeatures() throws Exception {
+    JavaTestHelper o = new JavaTestHelper();
+    o.setReq_bin((ByteBuffer)null);
+    assertNull(o.getReq_bin());
+    o.setReq_bin((byte[])null);
+    assertNull(o.getReq_bin());
+  }
 }