@@ -91,7 +91,8 @@ class DartGenerator : public BaseGenerator {
9191 DartKeywords()) {}
9292
9393 template <typename T>
94- void import_generator (const std::vector<T*>& definitions,
94+ void import_generator (const std::string& current_namespace,
95+ const std::vector<T*>& definitions,
9596 const std::string& included,
9697 std::set<std::string>& imports) {
9798 for (const auto & item : definitions) {
@@ -102,10 +103,13 @@ class DartGenerator : public BaseGenerator {
102103 std::string filename =
103104 namer_.File (filebase + (component.empty () ? " " : " _" + component));
104105
105- imports.emplace (" import './" + filename + " '" +
106- (component.empty ()
107- ? " ;\n "
108- : " as " + ImportAliasName (component) + " ;\n " ));
106+ std::string rename_namespace =
107+ component == current_namespace ? " " : component;
108+ imports.emplace (
109+ " import './" + filename + " '" +
110+ (rename_namespace.empty ()
111+ ? " ;\n "
112+ : " as " + ImportAliasName (rename_namespace) + " ;\n " ));
109113 }
110114 }
111115 }
@@ -118,22 +122,6 @@ class DartGenerator : public BaseGenerator {
118122 GenerateEnums (namespace_code);
119123 GenerateStructs (namespace_code);
120124
121- std::set<std::string> imports;
122-
123- for (const auto & included_file : parser_.GetIncludedFiles ()) {
124- if (included_file.filename == parser_.file_being_parsed_ ) continue ;
125-
126- import_generator (parser_.structs_ .vec , included_file.filename , imports);
127- import_generator (parser_.enums_ .vec , included_file.filename , imports);
128- }
129-
130- std::string import_code = " " ;
131- for (const auto & file : imports) {
132- import_code += file;
133- }
134-
135- import_code += import_code.empty () ? " " : " \n " ;
136-
137125 for (auto kv = namespace_code.begin (); kv != namespace_code.end (); ++kv) {
138126 code.clear ();
139127 code = code + " // " + FlatBuffersGeneratedWarning () + " \n " ;
@@ -158,8 +146,21 @@ class DartGenerator : public BaseGenerator {
158146 }
159147
160148 code += " \n " ;
161- code += import_code;
149+ std::set<std::string> imports;
150+ for (const auto & included_file : parser_.GetIncludedFiles ()) {
151+ if (included_file.filename == parser_.file_being_parsed_ ) continue ;
152+
153+ import_generator (kv->first , parser_.structs_ .vec ,
154+ included_file.filename , imports);
155+ import_generator (kv->first , parser_.enums_ .vec , included_file.filename ,
156+ imports);
157+ }
158+
159+ for (const auto & import_code : imports) {
160+ code += import_code;
161+ }
162162
163+ code += " \n " ;
163164 code += kv->second ;
164165
165166 if (!SaveFile (Filename (kv->first ).c_str (), code, false )) {
@@ -397,7 +398,14 @@ class DartGenerator : public BaseGenerator {
397398 } else if (type.enum_def ->is_union ) {
398399 return " dynamic" ;
399400 } else if (type.base_type != BASE_TYPE_VECTOR ) {
400- return namer_.Type (*type.enum_def );
401+ const std::string cur_namespace = namer_.Namespace (*current_namespace);
402+ std::string enum_namespace =
403+ namer_.Namespace (*type.enum_def ->defined_namespace );
404+ std::string typeName = namer_.Type (*type.enum_def );
405+ if (enum_namespace != " " && enum_namespace != cur_namespace) {
406+ typeName = enum_namespace + " ." + typeName;
407+ }
408+ return typeName;
401409 }
402410 }
403411
0 commit comments