More Thfirt code-gen improvements
Summary: Move read/write struct methods into PHP class definition, make struct read non-static in Java
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@664776 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc
index 1b466f7..66361d5 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -174,12 +174,13 @@
generate_java_struct_writer(out, tstruct);
}
scope_down(out);
+ out << endl;
}
void t_java_generator::generate_java_struct_reader(ofstream& out,
t_struct* tstruct) {
out <<
- indent() << "public static " << tstruct->get_name() << " read(TProtocol _iprot, TTransport _itrans) throws TException {" << endl;
+ indent() << "public void read(TProtocol _iprot, TTransport _itrans) throws TException {" << endl;
indent_up();
const vector<t_field*>& fields = tstruct->get_members();
@@ -187,7 +188,6 @@
// Declare stack tmp variables
out <<
- indent() << tstruct->get_name() << " _value = new " << tstruct->get_name() << "();" << endl <<
indent() << "TField _field;" << endl <<
indent() << "TStruct _struct = _iprot.readStructBegin(_itrans);" << endl;
@@ -222,9 +222,9 @@
indent(out) <<
"case " << (*f_iter)->get_key() << ":" << endl;
indent_up();
- generate_deserialize_field(out, *f_iter, "_value.");
+ generate_deserialize_field(out, *f_iter, "this.");
out <<
- indent() << "_value.__isset." << (*f_iter)->get_name() << " = true;" << endl;
+ indent() << "this.__isset." << (*f_iter)->get_name() << " = true;" << endl;
indent(out) <<
"break;" << endl;
indent_down();
@@ -245,8 +245,7 @@
scope_down(out);
out <<
- indent() << "_iprot.readStructEnd(_itrans);" << endl <<
- indent() << "return _value;" << endl;
+ indent() << "_iprot.readStructEnd(_itrans);" << endl;
indent_down();
out <<
@@ -290,8 +289,7 @@
indent_down();
out <<
- indent() << "}" << endl <<
- endl;
+ indent() << "}" << endl;
}
void t_java_generator::generate_java_struct_result_writer(ofstream& out,
@@ -545,7 +543,8 @@
f_service_ <<
indent() << "TMessage _msg = _iprot.readMessageBegin(_itrans);" << endl <<
- indent() << resultname << " __result = " << resultname << ".read(_iprot, _itrans);" << endl <<
+ indent() << resultname << " __result = new " << resultname << "();" << endl <<
+ indent() << "__result.read(_iprot, _itrans);" << endl <<
indent() << "_iprot.readMessageEnd(_itrans);" << endl <<
endl;
@@ -722,7 +721,8 @@
string resultname = tfunction->get_name() + "_result";
f_service_ <<
- indent() << argsname << " __args = " << argsname << ".read(_iprot, _itrans);" << endl <<
+ indent() << argsname << " __args = new " << argsname << "();" << endl <<
+ indent() << "__args.read(_iprot, _itrans);" << endl <<
indent() << "_iprot.readMessageEnd(_itrans);" << endl;
t_struct* xs = tfunction->get_xceptions();
@@ -890,7 +890,8 @@
t_struct* tstruct,
string prefix) {
out <<
- indent() << prefix << " = " << tstruct->get_name() << ".read(_iprot, _itrans);" << endl;
+ indent() << prefix << " = new " << tstruct->get_name() << "();" << endl <<
+ indent() << prefix << ".read(_iprot, _itrans);" << endl;
}
void t_java_generator::generate_deserialize_container(ofstream& out,
@@ -1292,10 +1293,12 @@
break;
}
- } else if (ttype->is_enum()) {
+ } else if (ttype->is_enum()) {
result += " = 0";
+ } else if (ttype->is_container()) {
+ result += " = new " + type_name(ttype) + "()";
} else {
- result += " = new " + type_name(tfield->get_type()) + "()";
+ result += " = null";
}
}
return result + ";";
diff --git a/compiler/cpp/src/generate/t_php_generator.cc b/compiler/cpp/src/generate/t_php_generator.cc
index 6f4b76a..74b73b9 100644
--- a/compiler/cpp/src/generate/t_php_generator.cc
+++ b/compiler/cpp/src/generate/t_php_generator.cc
@@ -118,8 +118,6 @@
void t_php_generator::generate_php_struct(t_struct* tstruct,
bool is_exception) {
generate_php_struct_definition(f_types_, tstruct, is_exception);
- generate_php_struct_reader(f_types_, tstruct);
- generate_php_struct_writer(f_types_, tstruct);
}
/**
@@ -153,8 +151,12 @@
"public $" << (*m_iter)->get_name() << " = null;" << endl;
}
- indent_down();
+ out << endl;
+ generate_php_struct_reader(out, tstruct);
+ generate_php_struct_writer(out, tstruct);
+
+ indent_down();
out <<
indent() << "}" << endl <<
endl;
@@ -166,8 +168,7 @@
vector<t_field*>::const_iterator f_iter;
indent(out) <<
- "function read_struct_" << tstruct->get_name() <<
- "($iprot, $itrans, &$value) " << endl;
+ "public function read($iprot, $itrans) " << endl;
scope_up(out);
out <<
@@ -223,7 +224,7 @@
indent(out) <<
"case " << (*f_iter)->get_key() << ":" << endl;
indent_up();
- generate_deserialize_field(out, *f_iter, "value->");
+ generate_deserialize_field(out, *f_iter, "this->");
indent(out) <<
"break;" << endl;
indent_down();
@@ -267,12 +268,10 @@
if (binary_inline_) {
indent(out) <<
- "function write_struct_" << name <<
- "(&$_output, &$value) {" << endl;
+ "public function write(&$_output) {" << endl;
} else {
indent(out) <<
- "function write_struct_" << name <<
- "($oprot, $otrans, &$value) {" << endl;
+ "public function write($oprot, $otrans) {" << endl;
}
indent_up();
@@ -299,7 +298,7 @@
}
// Write field contents
- generate_serialize_field(out, *f_iter, "value->");
+ generate_serialize_field(out, *f_iter, "this->");
// Write field closer
if (!binary_inline_) {
@@ -370,8 +369,6 @@
for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
t_struct* ts = (*f_iter)->get_arglist();
generate_php_struct_definition(f_service_, ts, false);
- generate_php_struct_reader(f_service_, ts);
- generate_php_struct_writer(f_service_, ts);
generate_php_function_helpers(*f_iter);
}
}
@@ -396,7 +393,6 @@
}
generate_php_struct_definition(f_service_, &result, false);
- generate_php_struct_reader(f_service_, &result);
}
/**
@@ -543,11 +539,11 @@
// Write to the stream
if (binary_inline_) {
f_service_ <<
- indent() << "write_struct_" << argsname << "($_output, $__args);" << endl <<
+ indent() << "$__args->write($_output, $__args);" << endl <<
indent() << "$this->_otrans->write($_output);" << endl;
} else {
f_service_ <<
- indent() << "write_struct_" << argsname << "($this->_oprot, $this->_otrans, $__args);" << endl <<
+ indent() << "$__args->write($this->_oprot, $this->_otrans);" << endl <<
indent() << "$this->_oprot->writeMessageEnd($this->_otrans);" << endl;
}
@@ -594,7 +590,7 @@
f_service_ <<
indent() << "$__result = new " << resultname << "();" << endl <<
- indent() << "read_struct_" << resultname << "($this->_iprot, $this->_otrans, $__result);" << endl;
+ indent() << "$__result->read($this->_iprot, $this->_otrans);" << endl;
if (!binary_inline_) {
f_service_ <<
@@ -794,7 +790,7 @@
string prefix) {
out <<
indent() << "$" << prefix << " = new " << tstruct->get_name() << "();" << endl <<
- indent() << "$xfer += read_struct_" << tstruct->get_name() << "($iprot, $itrans, $" << prefix << ");" << endl;
+ indent() << "$xfer += $" << prefix << "->read($iprot, $itrans);" << endl;
}
void t_php_generator::generate_deserialize_container(ofstream &out,
@@ -1067,10 +1063,10 @@
string prefix) {
if (binary_inline_) {
indent(out) <<
- "$xfer += write_struct_" << tstruct->get_name() << "($_output, $" << prefix << ");" << endl;
+ "$xfer += $" << prefix << "->write($_output);" << endl;
} else {
indent(out) <<
- "$xfer += write_struct_" << tstruct->get_name() << "($oprot, $otrans, $" << prefix << ");" << endl;
+ "$xfer += $" << prefix << "->write($oprot, $otrans);" << endl;
}
}
@@ -1363,7 +1359,7 @@
}
} else if (type->is_enum()) {
return "TType::I32";
- } else if (type->is_struct()) {
+ } else if (type->is_struct() || type->is_xception()) {
return "TType::STRUCT";
} else if (type->is_map()) {
return "TType::MAP";