Fix import problem in dart generated files. (fixes #7609). (#7621)

* Fix import problem in dart generated files. (fixes #7609).

* Fix naming.

* Fix minor changes in generated files.

* Add some tests. Fix minor problems.

* Fix minor format problem plus import alias issue.

* Minor fix in dart code generator, remove java from examples

* remove java and go generated files

* Fix dart tests.

* Fix spell problem.

* Remove excessive tests :))

Co-authored-by: Derek Bailey <derekbailey@google.com>
This commit is contained in:
Saman
2022-11-13 14:21:57 -05:00
committed by GitHub
parent 74756e5d1b
commit 7b038e3277
14 changed files with 889 additions and 9 deletions

View File

@@ -70,7 +70,7 @@ static std::set<std::string> DartKeywords() {
"dynamic", "implements", "set",
};
}
} // namespace
} // namespace
const std::string _kFb = "fb";
@@ -85,6 +85,27 @@ class DartGenerator : public BaseGenerator {
: BaseGenerator(parser, path, file_name, "", ".", "dart"),
namer_(WithFlagOptions(DartDefaultConfig(), parser.opts, path),
DartKeywords()) {}
template<typename T>
void import_generator(const std::vector<T *> &definitions,
const std::string &included,
std::set<std::string> &imports) {
for (const auto &item : definitions) {
if (item->file == included) {
std::string component = namer_.Namespace(*item->defined_namespace);
std::string filebase =
flatbuffers::StripPath(flatbuffers::StripExtension(item->file));
std::string filename =
namer_.File(filebase + (component.empty() ? "" : "_" + component));
imports.emplace("import './" + filename + "'" +
(component.empty()
? ";\n"
: " as " + ImportAliasName(component) + ";\n"));
}
}
}
// Iterate through all definitions we haven't generate code for (enums,
// structs, and tables) and output them to a single file.
bool generate() {
@@ -93,6 +114,20 @@ class DartGenerator : public BaseGenerator {
GenerateEnums(namespace_code);
GenerateStructs(namespace_code);
std::set<std::string> imports;
for (const auto &included_file : parser_.GetIncludedFiles()) {
if (included_file.filename == parser_.file_being_parsed_) continue;
import_generator(parser_.structs_.vec, included_file.filename, imports);
import_generator(parser_.enums_.vec, included_file.filename, imports);
}
std::string import_code = "";
for (const auto &file : imports) { import_code += file; }
import_code += import_code.empty() ? "" : "\n";
for (auto kv = namespace_code.begin(); kv != namespace_code.end(); ++kv) {
code.clear();
code = code + "// " + FlatBuffersGeneratedWarning() + "\n";
@@ -113,7 +148,10 @@ class DartGenerator : public BaseGenerator {
"' as " + ImportAliasName(kv2->first) + ";\n";
}
}
code += "\n";
code += import_code;
code += kv->second;
if (!SaveFile(Filename(kv->first).c_str(), code, false)) { return false; }