generate method
generates code_builder
structures that can still be modified
Implementation
Future<Library> generate() async {
final db = await GeneratorDatabase.fromConfig(config);
final jsonConverters = JsonConverters();
final typeCreator = TypeCreator([
const KnownTypeHandler(),
const GenericTypeHandler(),
InternalTypeHandler(db),
]);
const valueCreator = ValueCreator();
const errorCreator = ErrorCreator();
const attributeCreator = AttributeCreator(valueCreator);
final statementCreator = StatementCreator([
DtoHandler(
typeCreator,
valueCreator,
attributeCreator,
jsonConverters,
db,
),
QueryHandler(
typeCreator,
valueCreator,
attributeCreator,
jsonConverters,
db,
),
CommandHandler(
typeCreator,
valueCreator,
attributeCreator,
jsonConverters,
db,
errorCreator,
),
EnumHandler(
typeCreator,
valueCreator,
attributeCreator,
jsonConverters,
db,
),
]);
final body = [
for (final statement in db.statements)
if (db.shouldInclude(statement.name) && !db.isAttribute(statement))
statementCreator.create(statement)
];
// TODO: knownGroups?
// TODO: projectName?
return Library(
(l) => l
..body.addAll([
const Code(header),
Library(
(l) => l
..body.addAll([
Code(config.directives),
Code("part '${config.name}.g.dart';"),
Code('\n\n${config.extra}\n\n'),
...jsonConverters.converters,
timeClass,
...body,
])
..directives.addAll([
Directive.import('package:cqrs/contracts.dart'),
Directive.import(
'package:json_annotation/json_annotation.dart',
),
Directive.import('package:equatable/equatable.dart'),
]),
),
]),
);
}