function RuleSetGenerator::addRulesForPackage
2 calls to RuleSetGenerator::addRulesForPackage()
- RuleSetGenerator::addRulesForRequest in vendor/
composer/ composer/ src/ Composer/ DependencyResolver/ RuleSetGenerator.php - RuleSetGenerator::addRulesForRootAliases in vendor/
composer/ composer/ src/ Composer/ DependencyResolver/ RuleSetGenerator.php
File
-
vendor/
composer/ composer/ src/ Composer/ DependencyResolver/ RuleSetGenerator.php, line 161
Class
- RuleSetGenerator
- @author Nils Adermann <naderman@naderman.de> @phpstan-import-type ReasonData from Rule
Namespace
Composer\DependencyResolverCode
protected function addRulesForPackage(BasePackage $package, PlatformRequirementFilterInterface $platformRequirementFilter) : void {
/** @var \SplQueue<BasePackage> */
$workQueue = new \SplQueue();
$workQueue->enqueue($package);
while (!$workQueue->isEmpty()) {
$package = $workQueue->dequeue();
if (isset($this->addedMap[$package->id])) {
continue;
}
$this->addedMap[$package->id] = $package;
if (!$package instanceof AliasPackage) {
foreach ($package->getNames(false) as $name) {
$this->addedPackagesByNames[$name][] = $package;
}
}
else {
$workQueue->enqueue($package->getAliasOf());
$this->addRule(RuleSet::TYPE_PACKAGE, $this->createRequireRule($package, [
$package->getAliasOf(),
], Rule::RULE_PACKAGE_ALIAS, $package));
// aliases must be installed with their main package, so create a rule the other way around as well
$this->addRule(RuleSet::TYPE_PACKAGE, $this->createRequireRule($package->getAliasOf(), [
$package,
], Rule::RULE_PACKAGE_INVERSE_ALIAS, $package->getAliasOf()));
// if alias package has no self.version requires, its requirements do not
// need to be added as the aliased package processing will take care of it
if (!$package->hasSelfVersionRequires()) {
continue;
}
}
foreach ($package->getRequires() as $link) {
$constraint = $link->getConstraint();
if ($platformRequirementFilter->isIgnored($link->getTarget())) {
continue;
}
elseif ($platformRequirementFilter instanceof IgnoreListPlatformRequirementFilter) {
$constraint = $platformRequirementFilter->filterConstraint($link->getTarget(), $constraint);
}
$possibleRequires = $this->pool
->whatProvides($link->getTarget(), $constraint);
$this->addRule(RuleSet::TYPE_PACKAGE, $this->createRequireRule($package, $possibleRequires, Rule::RULE_PACKAGE_REQUIRES, $link));
foreach ($possibleRequires as $require) {
$workQueue->enqueue($require);
}
}
}
}