reportMissingDependencies function

void reportMissingDependencies(
  1. List<DependencyConfig> deps,
  2. Iterable<ImportableType> ignoredTypes,
  3. Iterable<String> ignoredTypesInPackages,
  4. Uri? targetFile,
  5. bool throwOnMissingDependencies,
)

Implementation

void reportMissingDependencies(
  List<DependencyConfig> deps,
  Iterable<ImportableType> ignoredTypes,
  Iterable<String> ignoredTypesInPackages,
  Uri? targetFile,
  bool throwOnMissingDependencies,
) {
  final messages = [];
  for (final dep in deps) {
    for (var iDep in dep.dependencies.where(
      (d) => !d.isFactoryParam && d.instanceName != kEnvironmentsName,
    )) {
      if ((ignoredTypes.contains(iDep.type) ||
          (iDep.type.import == null ||
              ignoredTypesInPackages.any(
                (type) => iDep.type.import!.startsWith('package:$type'),
              )))) {
        continue;
      }

      final possibleDeps = lookupPossibleDeps(iDep, deps);

      if (possibleDeps.isEmpty) {
        messages.add(
          "[${dep.typeImpl}] depends on unregistered type [${iDep.type}] ${iDep.instanceName == null ? '' : '@Named(${iDep.instanceName})'}, ${iDep.type.import == null ? '' : 'from ${iDep.type.import}'}",
        );
      } else {
        final availableEnvs = possibleDeps
            .map((e) => e.environments)
            .reduce((a, b) => a + b)
            .toSet();
        if (availableEnvs.isNotEmpty) {
          final missingEnvs = dep.environments.toSet().difference(
            availableEnvs,
          );
          if (missingEnvs.isNotEmpty) {
            messages.add(
              '[${dep.typeImpl}] ${dep.environments.toSet()} depends on Type [${iDep.type}]  ${iDep.type.import == null ? '' : 'from ${iDep.type.import}'} \n which is not available under environment keys $missingEnvs',
            );
          }
        }
      }
    }
  }

  if (messages.isNotEmpty) {
    messages.add(
      '\nDid you forget to annotate the above class(s) or their implementation with @injectable? \nor add the right environment keys?',
    );
    if (throwOnMissingDependencies) {
      throw messages.join('\n');
    }
    printBoxed(
      messages.join('\n'),
      header: "Missing dependencies in ${targetFile?.path}\n",
    );
  }
}