mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-02 04:04:19 +00:00
* 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:
@@ -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; }
|
||||
|
||||
Reference in New Issue
Block a user