build method
Generates the outputs for a given BuildStep.
Implementation
@override
Future<void> build(BuildStep buildStep) async {
Resolver resolver = buildStep.resolver;
List<JobEntry> entries = <JobEntry>[];
List<AssetId> ids = await buildStep
.findAssets(Glob('lib/**.dart'))
.toList();
ids.sort(_byPath);
for (AssetId id in ids) {
if (id.path.endsWith('.g.dart')) continue;
// fast skip: only files that may have @Job() get resolved
if (!(await buildStep.readAsString(id)).contains('Job(')) continue;
if (!await resolver.isLibrary(id)) continue;
LibraryElement library = await resolver.libraryFor(id);
String uri = id.uri.toString();
for (ClassElement element in library.classes) {
JobEntry? entry = _entry(element, uri);
if (entry != null) entries.add(entry);
}
}
_checkNames(entries);
String code = JobRegistryWriter(entries).write();
DartFormatter formatter = DartFormatter(
languageVersion: DartFormatter.latestLanguageVersion,
);
await buildStep.writeAsString(
AssetId(buildStep.inputId.package, output),
formatter.format(code),
);
}