reportMissingDependencies function
void
reportMissingDependencies(
- List<
DependencyConfig> deps, - Iterable<
ImportableType> ignoredTypes, - Iterable<
String> ignoredTypesInPackages, - Uri? targetFile,
- 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",
);
}
}