Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>tags/v23.0.0beta1
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => '2e49000abb5acb09de041369a2239db23fa63ec7', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => '2e49000abb5acb09de041369a2239db23fa63ec7', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |
@@ -20,7 +20,7 @@ use Composer\Semver\VersionParser; | |||
* | |||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions | |||
* | |||
* To require it's presence, you can require `composer-runtime-api ^2.0` | |||
* To require its presence, you can require `composer-runtime-api ^2.0` | |||
*/ | |||
class InstalledVersions | |||
{ | |||
@@ -228,7 +228,7 @@ class InstalledVersions | |||
/** | |||
* @return array | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} | |||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |||
*/ | |||
public static function getRootPackage() | |||
{ | |||
@@ -242,7 +242,7 @@ class InstalledVersions | |||
* | |||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. | |||
* @return array[] | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} | |||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |||
*/ | |||
public static function getRawData() | |||
{ | |||
@@ -265,7 +265,7 @@ class InstalledVersions | |||
* Returns the raw data of all installed.php which are currently loaded for custom implementations | |||
* | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
public static function getAllRawData() | |||
{ | |||
@@ -288,7 +288,7 @@ class InstalledVersions | |||
* @param array[] $data A vendor/composer/installed.php data set | |||
* @return void | |||
* | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data | |||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |||
*/ | |||
public static function reload($data) | |||
{ | |||
@@ -298,7 +298,7 @@ class InstalledVersions | |||
/** | |||
* @return array[] | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> | |||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |||
*/ | |||
private static function getInstalled() | |||
{ |
@@ -5,7 +5,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'name' => '__root__', | |||
'dev' => false, | |||
), | |||
@@ -16,7 +16,7 @@ | |||
'type' => 'library', | |||
'install_path' => __DIR__ . '/../', | |||
'aliases' => array(), | |||
'reference' => 'fa56c13484afa1baf908b93ed5b6990c6a0e9ad6', | |||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e', | |||
'dev_requirement' => false, | |||
), | |||
), |
@@ -42,30 +42,75 @@ namespace Composer\Autoload; | |||
*/ | |||
class ClassLoader | |||
{ | |||
/** @var ?string */ | |||
private $vendorDir; | |||
// PSR-4 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, int>> | |||
*/ | |||
private $prefixLengthsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<int, string>> | |||
*/ | |||
private $prefixDirsPsr4 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr4 = array(); | |||
// PSR-0 | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, array<string, string[]>> | |||
*/ | |||
private $prefixesPsr0 = array(); | |||
/** | |||
* @var array[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $fallbackDirsPsr0 = array(); | |||
/** @var bool */ | |||
private $useIncludePath = false; | |||
/** | |||
* @var string[] | |||
* @psalm-var array<string, string> | |||
*/ | |||
private $classMap = array(); | |||
/** @var bool */ | |||
private $classMapAuthoritative = false; | |||
/** | |||
* @var bool[] | |||
* @psalm-var array<string, bool> | |||
*/ | |||
private $missingClasses = array(); | |||
/** @var ?string */ | |||
private $apcuPrefix; | |||
/** | |||
* @var self[] | |||
*/ | |||
private static $registeredLoaders = array(); | |||
/** | |||
* @param ?string $vendorDir | |||
*/ | |||
public function __construct($vendorDir = null) | |||
{ | |||
$this->vendorDir = $vendorDir; | |||
} | |||
/** | |||
* @return string[] | |||
*/ | |||
public function getPrefixes() | |||
{ | |||
if (!empty($this->prefixesPsr0)) { | |||
@@ -75,28 +120,47 @@ class ClassLoader | |||
return array(); | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, array<int, string>> | |||
*/ | |||
public function getPrefixesPsr4() | |||
{ | |||
return $this->prefixDirsPsr4; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirs() | |||
{ | |||
return $this->fallbackDirsPsr0; | |||
} | |||
/** | |||
* @return array[] | |||
* @psalm-return array<string, string> | |||
*/ | |||
public function getFallbackDirsPsr4() | |||
{ | |||
return $this->fallbackDirsPsr4; | |||
} | |||
/** | |||
* @return string[] Array of classname => path | |||
* @psalm-var array<string, string> | |||
*/ | |||
public function getClassMap() | |||
{ | |||
return $this->classMap; | |||
} | |||
/** | |||
* @param array $classMap Class to filename map | |||
* @param string[] $classMap Class to filename map | |||
* @psalm-param array<string, string> $classMap | |||
* | |||
* @return void | |||
*/ | |||
public function addClassMap(array $classMap) | |||
{ | |||
@@ -111,9 +175,11 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, either | |||
* appending or prepending to the ones previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 root directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @return void | |||
*/ | |||
public function add($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -156,11 +222,13 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, either | |||
* appending or prepending to the ones previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* @param bool $prepend Whether to prepend the directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function addPsr4($prefix, $paths, $prepend = false) | |||
{ | |||
@@ -204,8 +272,10 @@ class ClassLoader | |||
* Registers a set of PSR-0 directories for a given prefix, | |||
* replacing any others previously set for this prefix. | |||
* | |||
* @param string $prefix The prefix | |||
* @param array|string $paths The PSR-0 base directories | |||
* @param string $prefix The prefix | |||
* @param string[]|string $paths The PSR-0 base directories | |||
* | |||
* @return void | |||
*/ | |||
public function set($prefix, $paths) | |||
{ | |||
@@ -220,10 +290,12 @@ class ClassLoader | |||
* Registers a set of PSR-4 directories for a given namespace, | |||
* replacing any others previously set for this namespace. | |||
* | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param array|string $paths The PSR-4 base directories | |||
* @param string $prefix The prefix/namespace, with trailing '\\' | |||
* @param string[]|string $paths The PSR-4 base directories | |||
* | |||
* @throws \InvalidArgumentException | |||
* | |||
* @return void | |||
*/ | |||
public function setPsr4($prefix, $paths) | |||
{ | |||
@@ -243,6 +315,8 @@ class ClassLoader | |||
* Turns on searching the include path for class files. | |||
* | |||
* @param bool $useIncludePath | |||
* | |||
* @return void | |||
*/ | |||
public function setUseIncludePath($useIncludePath) | |||
{ | |||
@@ -265,6 +339,8 @@ class ClassLoader | |||
* that have not been registered with the class map. | |||
* | |||
* @param bool $classMapAuthoritative | |||
* | |||
* @return void | |||
*/ | |||
public function setClassMapAuthoritative($classMapAuthoritative) | |||
{ | |||
@@ -285,6 +361,8 @@ class ClassLoader | |||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. | |||
* | |||
* @param string|null $apcuPrefix | |||
* | |||
* @return void | |||
*/ | |||
public function setApcuPrefix($apcuPrefix) | |||
{ | |||
@@ -305,6 +383,8 @@ class ClassLoader | |||
* Registers this instance as an autoloader. | |||
* | |||
* @param bool $prepend Whether to prepend the autoloader or not | |||
* | |||
* @return void | |||
*/ | |||
public function register($prepend = false) | |||
{ | |||
@@ -324,6 +404,8 @@ class ClassLoader | |||
/** | |||
* Unregisters this instance as an autoloader. | |||
* | |||
* @return void | |||
*/ | |||
public function unregister() | |||
{ | |||
@@ -403,6 +485,11 @@ class ClassLoader | |||
return self::$registeredLoaders; | |||
} | |||
/** | |||
* @param string $class | |||
* @param string $ext | |||
* @return string|false | |||
*/ | |||
private function findFileWithExtension($class, $ext) | |||
{ | |||
// PSR-4 lookup | |||
@@ -474,6 +561,10 @@ class ClassLoader | |||
* Scope isolated include. | |||
* | |||
* Prevents access to $this/self from included files. | |||
* | |||
* @param string $file | |||
* @return void | |||
* @private | |||
*/ | |||
function includeFile($file) | |||
{ |