THRIFT-3842 Dart generates incorrect code for a const struct
Client: Dart
Patch: Mark Erickson <merickson@apache.org>
This closes #1019
diff --git a/compiler/cpp/src/generate/t_dart_generator.cc b/compiler/cpp/src/generate/t_dart_generator.cc
index 2931447..bec2e47 100644
--- a/compiler/cpp/src/generate/t_dart_generator.cc
+++ b/compiler/cpp/src/generate/t_dart_generator.cc
@@ -544,6 +544,7 @@
// Print header
f_consts << autogen_comment() << dart_library(file_name) << endl;
+ f_consts << dart_thrift_imports() << endl;
export_class_to_library(file_name, class_name);
indent(f_consts) << "class " << class_name;
@@ -594,8 +595,8 @@
vector<t_field*>::const_iterator f_iter;
const map<t_const_value*, t_const_value*>& val = value->get_map();
map<t_const_value*, t_const_value*>::const_iterator v_iter;
- out << type_name(type) << " " << name << " = new " << type_name(type) << "();"
- << endl;
+ out << type_name(type) << " " << name << " = new " << type_name(type) << "()";
+ indent_up();
for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
t_type* field_type = NULL;
for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
@@ -607,10 +608,11 @@
throw "type error: " + type->get_name() + " has no field " + v_iter->first->get_string();
}
string val = render_const_value(out, name, field_type, v_iter->second);
- indent(out) << name << ".";
- out << v_iter->first->get_string() << " = " << val << ";" << endl;
+ out << endl;
+ indent(out) << ".." << v_iter->first->get_string() << " = " << val;
}
- out << endl;
+ indent_down();
+ out << ";" << endl;
} else if (type->is_map()) {
if (!defval) {
out << type_name(type) << " ";