build method

  1. @override
Future<void> build(
  1. BuildStep buildStep
)

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),
  );
}