You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by he...@apache.org on 2015/02/03 02:51:57 UTC

thrift git commit: THRIFT-2368 New option: reuse-objects for Java generator Client: Java Patch: adam.p.hajduk

Repository: thrift
Updated Branches:
  refs/heads/master a0c5ab711 -> 2f2d6ac7e


THRIFT-2368 New option: reuse-objects for Java generator
Client: Java
Patch: adam.p.hajduk

amendments to original patch


Project: http://git-wip-us.apache.org/repos/asf/thrift/repo
Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/2f2d6ac7
Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/2f2d6ac7
Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/2f2d6ac7

Branch: refs/heads/master
Commit: 2f2d6ac7ea9b77bbfc8edf36980155473c6fd86c
Parents: a0c5ab7
Author: henrique <he...@apache.org>
Authored: Tue Feb 3 12:47:31 2015 +1100
Committer: henrique <he...@apache.org>
Committed: Tue Feb 3 12:47:31 2015 +1100

----------------------------------------------------------------------
 compiler/cpp/src/generate/t_java_generator.cc | 34 ++++++++++++++++++++--
 1 file changed, 32 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/thrift/blob/2f2d6ac7/compiler/cpp/src/generate/t_java_generator.cc
----------------------------------------------------------------------
diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc
index 4e5b3ef..df3d1cf 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -3598,6 +3598,15 @@ void t_java_generator::generate_deserialize_map_element(ofstream& out,
   generate_deserialize_field(out, &fval, "", has_metadata);
 
   indent(out) << prefix << ".put(" << key << ", " << val << ");" << endl;
+
+  if ( reuse_objects_ && !get_true_type(fkey.get_type())->is_base_type()) {
+    indent(out) << key << " = null;" << endl;
+  }
+
+  if ( reuse_objects_ && !get_true_type(fval.get_type())->is_base_type()) {
+    indent(out) << val << " = null;" << endl;
+  }
+
 }
 
 /**
@@ -3623,6 +3632,11 @@ void t_java_generator::generate_deserialize_set_element(ofstream& out,
   generate_deserialize_field(out, &felem, "", has_metadata);
 
   indent(out) << prefix << ".add(" << elem << ");" << endl;
+
+  if ( reuse_objects_ && !get_true_type(felem.get_type())->is_base_type()) {
+    indent(out) << elem << " = null;" << endl;
+  }
+
 }
 
 /**
@@ -3648,6 +3662,11 @@ void t_java_generator::generate_deserialize_list_element(ofstream& out,
   generate_deserialize_field(out, &felem, "", has_metadata);
 
   indent(out) << prefix << ".add(" << elem << ");" << endl;
+
+  if ( reuse_objects_ && !get_true_type(felem.get_type())->is_base_type()) {
+    indent(out) << elem << " = null;" << endl;
+  }
+
 }
 
 /**
@@ -3975,7 +3994,7 @@ string t_java_generator::declare_field(t_field* tfield, bool init, bool comment)
         break;
       }
     } else if (ttype->is_enum()) {
-      result += " = 0";
+      result += " = null";
     } else if (ttype->is_container()) {
       result += " = new " + type_name(ttype, false, true) + "()";
     } else {
@@ -4618,7 +4637,18 @@ void t_java_generator::generate_java_struct_clear(std::ofstream& out, t_struct*
     }
 
     if (type_can_be_null(t)) {
-      indent(out) << "this." << field->get_name() << " = null;" << endl;
+
+      if (reuse_objects_ && (t->is_container() || t->is_struct())) {
+        indent(out) << "if (this." << field->get_name() << " != null) {" << endl;
+        indent_up();
+          indent(out) << "this." << field->get_name() << ".clear();" << endl;
+        indent_down();
+        indent(out) << "}" << endl;
+
+      } else {
+
+        indent(out) << "this." << field->get_name() << " = null;" << endl;
+      }
       continue;
     }