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;
}