forked from BigfootDev/flatbuffers
[dart] fix bug which generated wrong code (#8780)
This commit is contained in:
@@ -7,6 +7,7 @@ import 'dart:typed_data' show Uint8List;
|
|||||||
import 'package:flat_buffers/flat_buffers.dart' as fb;
|
import 'package:flat_buffers/flat_buffers.dart' as fb;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
enum Abc {
|
enum Abc {
|
||||||
$void(0),
|
$void(0),
|
||||||
where(1),
|
where(1),
|
||||||
|
|||||||
@@ -91,7 +91,8 @@ class DartGenerator : public BaseGenerator {
|
|||||||
DartKeywords()) {}
|
DartKeywords()) {}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void import_generator(const std::vector<T*>& definitions,
|
void import_generator(const std::string& current_namespace,
|
||||||
|
const std::vector<T*>& definitions,
|
||||||
const std::string& included,
|
const std::string& included,
|
||||||
std::set<std::string>& imports) {
|
std::set<std::string>& imports) {
|
||||||
for (const auto& item : definitions) {
|
for (const auto& item : definitions) {
|
||||||
@@ -102,10 +103,13 @@ class DartGenerator : public BaseGenerator {
|
|||||||
std::string filename =
|
std::string filename =
|
||||||
namer_.File(filebase + (component.empty() ? "" : "_" + component));
|
namer_.File(filebase + (component.empty() ? "" : "_" + component));
|
||||||
|
|
||||||
imports.emplace("import './" + filename + "'" +
|
std::string rename_namespace =
|
||||||
(component.empty()
|
component == current_namespace ? "" : component;
|
||||||
? ";\n"
|
imports.emplace(
|
||||||
: " as " + ImportAliasName(component) + ";\n"));
|
"import './" + filename + "'" +
|
||||||
|
(rename_namespace.empty()
|
||||||
|
? ";\n"
|
||||||
|
: " as " + ImportAliasName(rename_namespace) + ";\n"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -118,22 +122,6 @@ class DartGenerator : public BaseGenerator {
|
|||||||
GenerateEnums(namespace_code);
|
GenerateEnums(namespace_code);
|
||||||
GenerateStructs(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) {
|
for (auto kv = namespace_code.begin(); kv != namespace_code.end(); ++kv) {
|
||||||
code.clear();
|
code.clear();
|
||||||
code = code + "// " + FlatBuffersGeneratedWarning() + "\n";
|
code = code + "// " + FlatBuffersGeneratedWarning() + "\n";
|
||||||
@@ -158,8 +146,21 @@ class DartGenerator : public BaseGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
code += "\n";
|
code += "\n";
|
||||||
code += import_code;
|
std::set<std::string> imports;
|
||||||
|
for (const auto& included_file : parser_.GetIncludedFiles()) {
|
||||||
|
if (included_file.filename == parser_.file_being_parsed_) continue;
|
||||||
|
|
||||||
|
import_generator(kv->first, parser_.structs_.vec,
|
||||||
|
included_file.filename, imports);
|
||||||
|
import_generator(kv->first, parser_.enums_.vec, included_file.filename,
|
||||||
|
imports);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const auto& import_code : imports) {
|
||||||
|
code += import_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
code += "\n";
|
||||||
code += kv->second;
|
code += kv->second;
|
||||||
|
|
||||||
if (!SaveFile(Filename(kv->first).c_str(), code, false)) {
|
if (!SaveFile(Filename(kv->first).c_str(), code, false)) {
|
||||||
@@ -397,7 +398,14 @@ class DartGenerator : public BaseGenerator {
|
|||||||
} else if (type.enum_def->is_union) {
|
} else if (type.enum_def->is_union) {
|
||||||
return "dynamic";
|
return "dynamic";
|
||||||
} else if (type.base_type != BASE_TYPE_VECTOR) {
|
} else if (type.base_type != BASE_TYPE_VECTOR) {
|
||||||
return namer_.Type(*type.enum_def);
|
const std::string cur_namespace = namer_.Namespace(*current_namespace);
|
||||||
|
std::string enum_namespace =
|
||||||
|
namer_.Namespace(*type.enum_def->defined_namespace);
|
||||||
|
std::string typeName = namer_.Type(*type.enum_def);
|
||||||
|
if (enum_namespace != "" && enum_namespace != cur_namespace) {
|
||||||
|
typeName = enum_namespace + "." + typeName;
|
||||||
|
}
|
||||||
|
return typeName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import 'dart:typed_data' show Uint8List;
|
|||||||
import 'package:flat_buffers/flat_buffers.dart' as fb;
|
import 'package:flat_buffers/flat_buffers.dart' as fb;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MonsterExtra {
|
class MonsterExtra {
|
||||||
MonsterExtra._(this._bc, this._bcOffset);
|
MonsterExtra._(this._bc, this._bcOffset);
|
||||||
factory MonsterExtra(List<int> bytes) {
|
factory MonsterExtra(List<int> bytes) {
|
||||||
|
|||||||
Reference in New Issue
Block a user