generate method

  1. @override
FutureOr<String?> generate(
  1. LibraryReader library,
  2. BuildStep buildStep
)

Generates Dart code for an input Dart library.

May create additional outputs through the buildStep, but the 'primary' output is Dart code returned through the Future. If there is nothing to generate for this library may return null, or a Future that resolves to null or the empty string.

Implementation

@override
FutureOr<String?> generate(LibraryReader library, BuildStep buildStep) async {
  final resolver = buildStep.resolver;
  final annotatedClasses =
      library.classes.where(vibeAnnotation.hasAnnotationOf).toList();

  final String keys = annotatedClasses.map((c) {
    final visitor = ClassToKeyVisitor(c);
    c.visitChildren(visitor);
    return visitor.toString();
  }).join('\n');

  String observables = '';
  for (final c in annotatedClasses) {
    final visitor = ClassToObservableVisitor(c, resolver);
    c.visitChildren(visitor);
    final code = await visitor.generate();
    observables += '\n$code';
  }

  final String wrappers = annotatedClasses.map((ClassElement c) {
    final visitor = ClassToWrapperVisitor(c);
    c.visitChildren(visitor);
    return visitor.toString();
  }).join('\n');

  final String overriders = annotatedClasses.map((c) {
    final visitor = ClassToOverriderVisitor(c);
    c.visitChildren(visitor);
    return visitor.toString();
  }).join('\n');

  final String repositories = annotatedClasses.map((c) {
    final visitor = ClassToRepositoryVisitor(c);
    c.visitChildren(visitor);
    return visitor.toString();
  }).join('\n');

  final String mixins = annotatedClasses.map((c) {
    final visitor = ClassToWithMixinVisitor(c);
    c.visitChildren(visitor);
    return visitor.toString();
  }).join('\n');

  final String superClasses = annotatedClasses.map((c) {
    final visitor = ClassToSuperClassVisitor(c);
    c.visitChildren(visitor);
    return visitor.toString();
  }).join('\n');

  return '''
$superClasses
$keys
$wrappers
$overriders
$observables
$repositories
$mixins
''';
}