generate method

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

Generates JSON configuration for all injectable classes in library.

Implementation

@override
FutureOr<String?> generate(LibraryReader library, BuildStep buildStep) async {
  final allDepsInStep = <DependencyConfig>[];
  final libs = await buildStep.resolver.libraries.toList();
  final resolver = getResolver(libs);
  for (var clazz in library.classes) {
    if (_moduleChecker.hasAnnotationOfExact(clazz)) {
      throwIf(
        !clazz.isAbstract,
        '[${clazz.displayName}] must be an abstract class!',
        element: clazz,
      );
      final executables = <ExecutableElement>[
        ...clazz.getters,
        ...clazz.methods,
      ];
      for (var element in executables) {
        if (element.isPrivate) continue;
        allDepsInStep.add(
          DependencyResolver(resolver).resolveModuleMember(clazz, element),
        );
      }
    } else if (_hasInjectable(clazz) ||
        (_autoRegister && _hasConventionalMatch(clazz))) {
      allDepsInStep.add(
        DependencyResolver(resolver).resolve(clazz),
      );
    }
  }
  return allDepsInStep.isNotEmpty ? jsonEncode(allDepsInStep) : null;
}