THRIFT-3697 Dart generator does not name imports
Client: Dart
Patch: Mark Erickson
diff --git a/compiler/cpp/src/generate/t_dart_generator.cc b/compiler/cpp/src/generate/t_dart_generator.cc
index 7bae327..3d7f597 100644
--- a/compiler/cpp/src/generate/t_dart_generator.cc
+++ b/compiler/cpp/src/generate/t_dart_generator.cc
@@ -81,7 +81,7 @@
} else if( iter->first.compare("pubspec_lib") == 0) {
pubspec_lib_ = (iter->second);
} else {
- throw "unknown option dart:" + iter->first;
+ throw "unknown option dart:" + iter->first;
}
}
@@ -241,7 +241,7 @@
std::string function_signature(t_function* tfunction);
std::string argument_list(t_struct* tstruct);
std::string type_to_enum(t_type* ttype);
- std::string get_enum_class_name(t_type* type);
+ std::string get_ttype_class_name(t_type* ttype);
bool type_can_be_null(t_type* ttype) {
ttype = get_true_type(ttype);
@@ -359,10 +359,11 @@
const vector<t_program*>& includes = program_->get_includes();
for (size_t i = 0; i < includes.size(); ++i) {
string include_name = find_library_name(includes[i]);
+ string named_import = "t_" + include_name;
if (package_prefix_.empty()) {
- imports += "import 'package:" + include_name + "/" + include_name + ".dart';" + endl;
+ imports += "import 'package:" + include_name + "/" + include_name + ".dart' as " + named_import + ";" + endl;
} else {
- imports += "import 'package:" + package_prefix_ + include_name + ".dart';" + endl;
+ imports += "import 'package:" + package_prefix_ + include_name + ".dart' as " + named_import + ";" + endl;
}
}
@@ -977,7 +978,7 @@
// if field is an enum, check that its value is valid
if (type->is_enum()) {
string field_name = get_field_name(field->get_name());
- indent(out) << "if (" << generate_isset_check(field) << " && !" << get_enum_class_name(type)
+ indent(out) << "if (" << generate_isset_check(field) << " && !" << get_ttype_class_name(type)
<< ".VALID_VALUES.contains(" << field_name << "))";
scope_up(out);
indent(out) << "throw new TProtocolError(TProtocolErrorType.UNKNOWN, \"The field '"
@@ -1293,7 +1294,7 @@
indent(out) << "ret.write(\"BINARY\");" << endl;
} else if (field->get_type()->is_enum()) {
indent(out) << "String " << field_name << "_name = "
- << get_enum_class_name(field->get_type())
+ << get_ttype_class_name(field->get_type())
<< ".VALUES_TO_NAMES[this." << field_name << "];" << endl;
indent(out) << "if (" << field_name << "_name != null)";
scope_up(out);
@@ -1407,7 +1408,7 @@
void t_dart_generator::generate_service_interface(t_service* tservice) {
string extends_iface = "";
if (tservice->get_extends() != NULL) {
- extends_iface = " extends " + tservice->get_extends()->get_name();
+ extends_iface = " extends " + get_ttype_class_name(tservice->get_extends());
}
generate_dart_doc(f_service_, tservice);
@@ -1452,7 +1453,7 @@
string extends = "";
string extends_client = "";
if (tservice->get_extends() != NULL) {
- extends = tservice->get_extends()->get_name();
+ extends = get_ttype_class_name(tservice->get_extends());
extends_client = " extends " + extends + "Client";
}
@@ -1587,7 +1588,7 @@
string extends = "";
string extends_processor = "";
if (tservice->get_extends() != NULL) {
- extends = type_name(tservice->get_extends());
+ extends = get_ttype_class_name(tservice->get_extends());
extends_processor = " extends " + extends + "Processor";
}
@@ -2148,7 +2149,7 @@
return "List<" + type_name(tlist->get_elem_type()) + ">";
}
- return ttype->get_name();
+ return get_ttype_class_name(ttype);
}
/**
@@ -2427,8 +2428,13 @@
}
}
-std::string t_dart_generator::get_enum_class_name(t_type* type) {
- return type->get_name();
+std::string t_dart_generator::get_ttype_class_name(t_type* ttype) {
+ if (program_ == ttype->get_program()) {
+ return ttype->get_name();
+ } else {
+ string named_import = "t_" + find_library_name(ttype->get_program());
+ return named_import + "." + ttype->get_name();
+ }
}
THRIFT_REGISTER_GENERATOR(