Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. RuleSetGenerator.php

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\DependencyResolver

Code

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);
            }
        }
    }
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal