build method
Generates the outputs for a given BuildStep.
This is where the actual code generation happens. Implementers should read the input asset from the build step, transform it as needed, and write one or more output files.
Implementation
@override
FutureOr<void> build(BuildStep buildStep) async {
final library = buildStep.resolver.resolveLibrary(buildStep.asset);
final allDepsInStep = <DependencyConfig>[];
final resolver = getTypeResolver(buildStep.resolver);
for (var clazz in library.classes) {
if (_moduleChecker.hasAnnotationOfExact(clazz)) {
throwIf(
!clazz.hasAbstract,
'[${clazz.name}] must be an abstract class!',
element: clazz,
);
final executables = <ExecutableElement>[
...clazz.accessors.where((e) => e.isGetter),
...clazz.methods,
];
for (var element in executables) {
if (element.isPrivate) continue;
allDepsInStep.add(
LeanDependencyResolver(
resolver,
).resolveModuleMember(clazz, element),
);
}
} else if (_hasInjectable(clazz) ||
(_autoRegister && _hasConventionalMatch(clazz))) {
allDepsInStep.add(
LeanDependencyResolver(resolver).resolve(clazz),
);
}
}
if (allDepsInStep.isNotEmpty) {
await buildStep.writeAsString(
jsonEncode(allDepsInStep),
extension: '.injectable.ln.json',
);
}
}