Skip to content

Commit

Permalink
Add more type annotations
Browse files Browse the repository at this point in the history
  • Loading branch information
Seldaek committed Sep 5, 2021
1 parent dd49db6 commit 4bcd860
Show file tree
Hide file tree
Showing 29 changed files with 217 additions and 119 deletions.
6 changes: 5 additions & 1 deletion src/Composer/DependencyResolver/Decisions.php
Expand Up @@ -16,17 +16,21 @@
* Stores decisions on installing, removing or keeping packages
*
* @author Nils Adermann <naderman@naderman.de>
* @implements \Iterator<array{0: int, 1: mixed}>
*/
class Decisions implements \Iterator, \Countable
{
const DECISION_LITERAL = 0;
const DECISION_REASON = 1;

/** @var Pool */
protected $pool;
/** @var array<int, int> */
protected $decisionMap;
/** @var array<array{0: int, 1: mixed}> */
protected $decisionQueue = array();

public function __construct($pool)
public function __construct(Pool $pool)
{
$this->pool = $pool;
$this->decisionMap = array();
Expand Down
2 changes: 2 additions & 0 deletions src/Composer/DependencyResolver/DefaultPolicy.php
Expand Up @@ -23,7 +23,9 @@
*/
class DefaultPolicy implements PolicyInterface
{
/** @var bool */
private $preferStable;
/** @var bool */
private $preferLowest;

public function __construct($preferStable = false, $preferLowest = false)
Expand Down
7 changes: 2 additions & 5 deletions src/Composer/DependencyResolver/GenericRule.php
Expand Up @@ -21,14 +21,11 @@
*/
class GenericRule extends Rule
{
/** @var int[] */
protected $literals;

/**
* @param array $literals
* @param int|null $reason A RULE_* constant describing the reason for generating this rule
* @param Link|BasePackage|int|null|array $reasonData
*
* @phpstan-param Link|BasePackage|int|null|array{packageName: string, constraint: ConstraintInterface} $reasonData
* @param int[] $literals
*/
public function __construct(array $literals, $reason, $reasonData)
{
Expand Down
5 changes: 2 additions & 3 deletions src/Composer/DependencyResolver/MultiConflictRule.php
Expand Up @@ -22,12 +22,11 @@
*/
class MultiConflictRule extends Rule
{
/** @var int[] */
protected $literals;

/**
* @param array $literals
* @param int $reason A RULE_* constant describing the reason for generating this rule
* @param Link|BasePackage $reasonData
* @param int[] $literals
*/
public function __construct(array $literals, $reason, $reasonData)
{
Expand Down
2 changes: 2 additions & 0 deletions src/Composer/DependencyResolver/Pool.php
Expand Up @@ -30,7 +30,9 @@ class Pool implements \Countable
protected $packages = array();
/** @var array<string, BasePackage[]> */
protected $packageByName = array();
/** @var VersionParser */
protected $versionParser;
/** @var array<string, array<string, BasePackage[]>> */
protected $providerCache = array();
/** @var BasePackage[] */
protected $unacceptableFixedOrLockedPackages;
Expand Down
5 changes: 5 additions & 0 deletions src/Composer/DependencyResolver/PoolBuilder.php
Expand Up @@ -94,7 +94,9 @@ class PoolBuilder
* @phpstan-var list<PackageInterface>
*/
private $unacceptableFixedOrLockedPackages = array();
/** @var string[] */
private $updateAllowList = array();
/** @var array<string, string> */
private $skippedLoad = array();

/**
Expand All @@ -104,6 +106,8 @@ class PoolBuilder
*
* Packages get cleared from this list if they get unlocked as in that case
* we need to actually load them
*
* @var array<string, true>
*/
private $maxExtendedReqs = array();
/**
Expand All @@ -112,6 +116,7 @@ class PoolBuilder
*/
private $updateAllowWarned = array();

/** @var int */
private $indexCounter = 0;

/**
Expand Down
5 changes: 3 additions & 2 deletions src/Composer/DependencyResolver/Problem.php
Expand Up @@ -30,16 +30,17 @@ class Problem
{
/**
* A map containing the id of each rule part of this problem as a key
* @var array
* @var array<string, true>
*/
protected $reasonSeen;

/**
* A set of reasons for the problem, each is a rule or a root require and a rule
* @var array
* @var array<int, array<int, Rule>>
*/
protected $reasons = array();

/** @var int */
protected $section = 0;

/**
Expand Down
13 changes: 10 additions & 3 deletions src/Composer/DependencyResolver/Request.php
Expand Up @@ -40,12 +40,19 @@ class Request
*/
const UPDATE_LISTED_WITH_TRANSITIVE_DEPS = 2;

/** @var ?LockArrayRepository */
protected $lockedRepository;
/** @var array<string, ConstraintInterface> */
protected $requires = array();
/** @var array<string, PackageInterface> */
protected $fixedPackages = array();
/** @var array<string, PackageInterface> */
protected $lockedPackages = array();
/** @var array<string, PackageInterface> */
protected $fixedLockedPackages = array();
/** @var string[] */
protected $updateAllowList = array();
/** @var false|self::UPDATE_* */
protected $updateAllowTransitiveDependencies = false;

public function __construct(LockArrayRepository $lockedRepository = null)
Expand Down Expand Up @@ -169,12 +176,12 @@ public function getPresentMap($packageIds = false)

if ($this->lockedRepository) {
foreach ($this->lockedRepository->getPackages() as $package) {
$presentMap[$packageIds ? $package->id : spl_object_hash($package)] = $package;
$presentMap[$packageIds ? $package->getId() : spl_object_hash($package)] = $package;
}
}

foreach ($this->fixedPackages as $package) {
$presentMap[$packageIds ? $package->id : spl_object_hash($package)] = $package;
$presentMap[$packageIds ? $package->getId() : spl_object_hash($package)] = $package;
}

return $presentMap;
Expand All @@ -185,7 +192,7 @@ public function getFixedPackagesMap()
$fixedPackagesMap = array();

foreach ($this->fixedPackages as $package) {
$fixedPackagesMap[$package->id] = $package;
$fixedPackagesMap[$package->getId()] = $package;
}

return $fixedPackagesMap;
Expand Down
38 changes: 25 additions & 13 deletions src/Composer/DependencyResolver/Rule.php
Expand Up @@ -19,35 +19,45 @@
use Composer\Repository\PlatformRepository;
use Composer\Package\Version\VersionParser;
use Composer\Semver\Constraint\Constraint;
use Composer\Semver\Constraint\ConstraintInterface;

/**
* @author Nils Adermann <naderman@naderman.de>
* @author Ruben Gonzalez <rubenrua@gmail.com>
* @phpstan-type ReasonData Link|BasePackage|string|int|array{packageName: string, constraint: ConstraintInterface}|array{package: BasePackage}
*/
abstract class Rule
{
// reason constants
const RULE_ROOT_REQUIRE = 2;
const RULE_FIXED = 3;
const RULE_PACKAGE_CONFLICT = 6;
const RULE_PACKAGE_REQUIRES = 7;
const RULE_PACKAGE_SAME_NAME = 10;
const RULE_LEARNED = 12;
const RULE_PACKAGE_ALIAS = 13;
const RULE_PACKAGE_INVERSE_ALIAS = 14;
// reason constants and // their reason data contents
const RULE_ROOT_REQUIRE = 2; // array{packageName: string, constraint: ConstraintInterface}
const RULE_FIXED = 3; // array{package: BasePackage}
const RULE_PACKAGE_CONFLICT = 6; // Link
const RULE_PACKAGE_REQUIRES = 7; // Link
const RULE_PACKAGE_SAME_NAME = 10; // string (package name)
const RULE_LEARNED = 12; // int (rule id)
const RULE_PACKAGE_ALIAS = 13; // BasePackage
const RULE_PACKAGE_INVERSE_ALIAS = 14; // BasePackage

// bitfield defs
const BITFIELD_TYPE = 0;
const BITFIELD_REASON = 8;
const BITFIELD_DISABLED = 16;

/** @var int */
protected $bitfield;
/** @var Request */
protected $request;
/**
* @var Link|BasePackage|ConstraintInterface|string
* @phpstan-var ReasonData
*/
protected $reasonData;

/**
* @param int $reason A RULE_* constant describing the reason for generating this rule
* @param Link|BasePackage $reasonData
* @param self::RULE_* $reason A RULE_* constant describing the reason for generating this rule
* @param Link|BasePackage|ConstraintInterface|string $reasonData
*
* @phpstan-param ReasonData $reasonData
*/
public function __construct($reason, $reasonData)
{
Expand Down Expand Up @@ -253,17 +263,19 @@ public function getPrettyString(RepositorySet $repositorySet, Request $request,
case self::RULE_PACKAGE_REQUIRES:
$sourceLiteral = array_shift($literals);
$sourcePackage = $this->deduplicateDefaultBranchAlias($pool->literalToPackage($sourceLiteral));
/** @var Link */
$reasonData = $this->reasonData;

$requires = array();
foreach ($literals as $literal) {
$requires[] = $pool->literalToPackage($literal);
}

$text = $this->reasonData->getPrettyString($sourcePackage);
$text = $reasonData->getPrettyString($sourcePackage);
if ($requires) {
$text .= ' -> satisfiable by ' . $this->formatPackagesUnique($pool, $requires, $isVerbose) . '.';
} else {
$targetName = $this->reasonData->getTarget();
$targetName = $reasonData->getTarget();

$reason = Problem::getMissingPackageReason($repositorySet, $request, $pool, $isVerbose, $targetName, $this->reasonData->getConstraint());

Expand Down
7 changes: 5 additions & 2 deletions src/Composer/DependencyResolver/Rule2Literals.php
Expand Up @@ -20,14 +20,14 @@
*/
class Rule2Literals extends Rule
{
/** @var int */
protected $literal1;
/** @var int */
protected $literal2;

/**
* @param int $literal1
* @param int $literal2
* @param int $reason A RULE_* constant describing the reason for generating this rule
* @param Link|BasePackage $reasonData
*/
public function __construct($literal1, $literal2, $reason, $reasonData)
{
Expand All @@ -42,11 +42,13 @@ public function __construct($literal1, $literal2, $reason, $reasonData)
}
}

/** @return int[] */
public function getLiterals()
{
return array($this->literal1, $this->literal2);
}

/** @return string */
public function getHash()
{
return $this->literal1.','.$this->literal2;
Expand Down Expand Up @@ -91,6 +93,7 @@ public function equals(Rule $rule)
return true;
}

/** @return false */
public function isAssertion()
{
return false;
Expand Down
26 changes: 18 additions & 8 deletions src/Composer/DependencyResolver/RuleSet.php
Expand Up @@ -16,6 +16,7 @@

/**
* @author Nils Adermann <naderman@naderman.de>
* @implements \IteratorAggregate<Rule>
*/
class RuleSet implements \IteratorAggregate, \Countable
{
Expand All @@ -27,31 +28,32 @@ class RuleSet implements \IteratorAggregate, \Countable
/**
* READ-ONLY: Lookup table for rule id to rule object
*
* @var Rule[]
* @var array<int, Rule>
*/
public $ruleById;
public $ruleById = array();

/** @var array<255|0|1|4, string> */
protected static $types = array(
255 => 'UNKNOWN',
self::TYPE_PACKAGE => 'PACKAGE',
self::TYPE_REQUEST => 'REQUEST',
self::TYPE_LEARNED => 'LEARNED',
);

/** @var array<self::TYPE_*, Rule[]> */
protected $rules;
protected $nextRuleId;

protected $rulesByHash;
/** @var int */
protected $nextRuleId = 0;

/** @var array<string, Rule|Rule[]> */
protected $rulesByHash = array();

public function __construct()
{
$this->nextRuleId = 0;

foreach ($this->getTypes() as $type) {
$this->rules[$type] = array();
}

$this->rulesByHash = array();
}

public function add(Rule $rule, $type)
Expand Down Expand Up @@ -109,6 +111,7 @@ public function ruleById($id)
return $this->ruleById[$id];
}

/** @return array<self::TYPE_*, Rule[]> */
public function getRules()
{
return $this->rules;
Expand All @@ -123,13 +126,19 @@ public function getIterator()
return new RuleSetIterator($this->getRules());
}

/**
* @param self::TYPE_*|array<self::TYPE_*> $types
* @return RuleSetIterator
*/
public function getIteratorFor($types)
{
if (!\is_array($types)) {
$types = array($types);
}

$allRules = $this->getRules();

/** @var array<self::TYPE_*, Rule[]> $rules */
$rules = array();

foreach ($types as $type) {
Expand All @@ -154,6 +163,7 @@ public function getIteratorWithout($types)
return new RuleSetIterator($rules);
}

/** @return array{0: 0, 1: 1, 2: 4} */
public function getTypes()
{
$types = self::$types;
Expand Down

0 comments on commit 4bcd860

Please sign in to comment.