From 8109757e6cdf12e08b22dd0f563e1624a60fe0c9 Mon Sep 17 00:00:00 2001 From: Mark Slee Date: Wed, 14 Mar 2007 03:07:00 +0000 Subject: [PATCH] Generate toString() convenience method for Thrift java structs Reviewed By: biren git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665059 13f79535-47bb-0310-9956-ffa450edef68 --- compiler/cpp/src/generate/t_java_generator.cc | 44 ++++++++++++++++++- compiler/cpp/src/generate/t_java_generator.h | 1 + 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc index 6a444d5b..4807d4a8 100644 --- a/compiler/cpp/src/generate/t_java_generator.cc +++ b/compiler/cpp/src/generate/t_java_generator.cc @@ -403,6 +403,7 @@ void t_java_generator::generate_java_struct_definition(ofstream &out, } else { generate_java_struct_writer(out, tstruct); } + generate_java_struct_tostring(out, tstruct); scope_down(out); out << endl; } @@ -548,7 +549,8 @@ void t_java_generator::generate_java_struct_writer(ofstream& out, indent_down(); out << - indent() << "}" << endl; + indent() << "}" << endl << + endl; } /** @@ -630,6 +632,46 @@ void t_java_generator::generate_java_struct_result_writer(ofstream& out, endl; } +/** + * Generates a toString() method for the given struct + * + * @param tstruct The struct definition + */ +void t_java_generator::generate_java_struct_tostring(ofstream& out, + t_struct* tstruct) { + out << + indent() << "public String toString() {" << endl; + indent_up(); + + out << + indent() << "StringBuffer sb = new StringBuffer(\"" << tstruct->get_name() << "(\");" << endl; + + const vector& fields = tstruct->get_members(); + vector::const_iterator f_iter; + bool first = true; + for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) { + if (first) { + first = false; + indent(out) << "sb.append(\"" << (*f_iter)->get_name() << ":\");" << endl; + } else { + indent(out) << "sb.append(\"," << (*f_iter)->get_name() << ":\");" << endl; + } + t_type* ttype = (*f_iter)->get_type(); + if (ttype->is_xception() || ttype->is_struct()) { + indent(out) << "sb.append(this." << (*f_iter)->get_name() << ".toString());" << endl; + } else { + indent(out) << "sb.append(this." << (*f_iter)->get_name() << ");" << endl; + } + } + out << + indent() << "sb.append(\")\");" << endl << + indent() << "return sb.toString();" << endl; + + indent_down(); + indent(out) << "}" << endl << + endl; +} + /** * Generates a thrift service. In C++, this comprises an entirely separate diff --git a/compiler/cpp/src/generate/t_java_generator.h b/compiler/cpp/src/generate/t_java_generator.h index 48533437..7afffdb4 100644 --- a/compiler/cpp/src/generate/t_java_generator.h +++ b/compiler/cpp/src/generate/t_java_generator.h @@ -53,6 +53,7 @@ class t_java_generator : public t_oop_generator { void generate_java_struct_reader(std::ofstream& out, t_struct* tstruct); void generate_java_struct_result_writer(std::ofstream& out, t_struct* tstruct); void generate_java_struct_writer(std::ofstream& out, t_struct* tstruct); + void generate_java_struct_tostring(std::ofstream& out, t_struct* tstruct); void generate_function_helpers(t_function* tfunction); -- 2.17.1