build method

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

Generates the outputs for a given BuildStep.

Implementation

@override
Future<void> build(bld.BuildStep buildStep) async {
  try {
    final fileInputId = buildStep.inputId;
    final filename = fileInputId.pathSegments.last;
    final keysFileInputId = fileInputId.changeExtension('.keys.dart');
    final keysFilename = keysFileInputId.pathSegments.last;
    final libraryElement = await buildStep.resolver.libraryFor(fileInputId);
    const typeChecker = TypeChecker.fromRuntime(GenKeys);
    final annotatedElements =
        LibraryReader(libraryElement).annotatedWith(typeChecker);

    _throwOnPartOrAnnotationWrong(annotatedElements, keysFilename, filename,
        libraryElement, fileInputId);

    if (annotatedElements.isNotEmpty) {
      final keyMetas =
          await _keyMetasFromAnnotatedElements(annotatedElements, buildStep);

      _throwOnAnnotationButNoKeys(keyMetas, fileInputId);

      await _generateKeysFile(filename, keyMetas, buildStep, keysFileInputId);
    }
  } on bld.NonLibraryAssetException {
    // if here, likely hit a file we don't want to process. (e.g., .g.dart file). Do nothing.
  }
}