in lib/src/package_config_impl.dart [56:133]
static PackageTree _validatePackages(Iterable<Package> originalPackages,
List<Package> packages, void Function(Object error) onError) {
var packageNames = <String>{};
var tree = TriePackageTree();
for (var originalPackage in packages) {
SimplePackage? newPackage;
if (originalPackage is! SimplePackage) {
// SimplePackage validates these properties.
newPackage = SimplePackage.validate(
originalPackage.name,
originalPackage.root,
originalPackage.packageUriRoot,
originalPackage.languageVersion,
originalPackage.extraData,
originalPackage.relativeRoot, (error) {
if (error is PackageConfigArgumentError) {
onError(PackageConfigArgumentError(packages, 'packages',
'Package ${newPackage!.name}: ${error.message}'));
} else {
onError(error);
}
});
if (newPackage == null) continue;
} else {
newPackage = originalPackage;
}
var name = newPackage.name;
if (packageNames.contains(name)) {
onError(PackageConfigArgumentError(
name, 'packages', "Duplicate package name '$name'"));
continue;
}
packageNames.add(name);
tree.add(newPackage, (error) {
if (error is ConflictException) {
// There is a conflict with an existing package.
var existingPackage = error.existingPackage;
switch (error.conflictType) {
case ConflictType.sameRoots:
onError(PackageConfigArgumentError(
originalPackages,
'packages',
'Packages ${newPackage!.name} and ${existingPackage.name} '
'have the same root directory: ${newPackage.root}.\n'));
break;
case ConflictType.interleaving:
// The new package is inside the package URI root of the existing
// package.
onError(PackageConfigArgumentError(
originalPackages,
'packages',
'Package ${newPackage!.name} is inside the root of '
'package ${existingPackage.name}, and the package root '
'of ${existingPackage.name} is inside the root of '
'${newPackage.name}.\n'
'${existingPackage.name} package root: '
'${existingPackage.packageUriRoot}\n'
'${newPackage.name} root: ${newPackage.root}\n'));
break;
case ConflictType.insidePackageRoot:
onError(PackageConfigArgumentError(
originalPackages,
'packages',
'Package ${newPackage!.name} is inside the package root of '
'package ${existingPackage.name}.\n'
'${existingPackage.name} package root: '
'${existingPackage.packageUriRoot}\n'
'${newPackage.name} root: ${newPackage.root}\n'));
break;
}
} else {
// Any other error.
onError(error);
}
});
}
return tree;
}