Updated Branches: refs/heads/master 765bbfb55 -> d522421d7
Thrift-1775: Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/d522421d Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/d522421d Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/d522421d Branch: refs/heads/master Commit: d522421d7f8260fa180a607ab7db5af02b7a16a2 Parents: 765bbfb Author: kamilsalas <[email protected]> Authored: Sun Feb 3 22:07:02 2013 +0100 Committer: Jens Geyer <[email protected]> Committed: Sun Jun 9 13:47:37 2013 +0200 ---------------------------------------------------------------------- compiler/cpp/src/generate/t_java_generator.cc | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/d522421d/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 c9a3e56..988bbbf 100644 --- a/compiler/cpp/src/generate/t_java_generator.cc +++ b/compiler/cpp/src/generate/t_java_generator.cc @@ -808,8 +808,24 @@ void t_java_generator::generate_java_union(t_struct* tstruct) { } void t_java_generator::generate_union_constructor(ofstream& out, t_struct* tstruct) { + const vector<t_field*>& members = tstruct->get_members(); + vector<t_field*>::const_iterator m_iter; + indent(out) << "public " << type_name(tstruct) << "() {" << endl; - indent(out) << " super();" << endl; + indent_up(); + bool default_value = false; + for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) { + t_type* type = get_true_type((*m_iter)->get_type()); + if ((*m_iter)->get_value() != NULL) { + indent(out) << "super(_Fields." << constant_name((*m_iter)->get_name()) << ", " << render_const_value(out, type, (*m_iter)->get_value()) << ");" << endl; + default_value = true; + break; + } + } + if (default_value == false) { + indent(out) << "super();" << endl; + } + indent_down(); indent(out) << "}" << endl << endl; indent(out) << "public " << type_name(tstruct) << "(_Fields setField, Object value) {" << endl; @@ -825,8 +841,6 @@ void t_java_generator::generate_union_constructor(ofstream& out, t_struct* tstru indent(out) << "}" << endl << endl; // generate "constructors" for each field - const vector<t_field*>& members = tstruct->get_members(); - vector<t_field*>::const_iterator m_iter; for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) { t_type* type = (*m_iter)->get_type(); indent(out) << "public static " << type_name(tstruct) << " " << (*m_iter)->get_name() << "(" << type_name(type) << " value) {" << endl;
