|
@@ -45,34 +45,35 @@ class ClassLoader
|
|
|
/** @var \Closure(string):void */
|
|
/** @var \Closure(string):void */
|
|
|
private static $includeFile;
|
|
private static $includeFile;
|
|
|
|
|
|
|
|
- /** @var string|null */
|
|
|
|
|
|
|
+ /** @var ?string */
|
|
|
private $vendorDir;
|
|
private $vendorDir;
|
|
|
|
|
|
|
|
// PSR-4
|
|
// PSR-4
|
|
|
/**
|
|
/**
|
|
|
- * @var array<string, array<string, int>>
|
|
|
|
|
|
|
+ * @var array[]
|
|
|
|
|
+ * @psalm-var array<string, array<string, int>>
|
|
|
*/
|
|
*/
|
|
|
private $prefixLengthsPsr4 = array();
|
|
private $prefixLengthsPsr4 = array();
|
|
|
/**
|
|
/**
|
|
|
- * @var array<string, list<string>>
|
|
|
|
|
|
|
+ * @var array[]
|
|
|
|
|
+ * @psalm-var array<string, array<int, string>>
|
|
|
*/
|
|
*/
|
|
|
private $prefixDirsPsr4 = array();
|
|
private $prefixDirsPsr4 = array();
|
|
|
/**
|
|
/**
|
|
|
- * @var list<string>
|
|
|
|
|
|
|
+ * @var array[]
|
|
|
|
|
+ * @psalm-var array<string, string>
|
|
|
*/
|
|
*/
|
|
|
private $fallbackDirsPsr4 = array();
|
|
private $fallbackDirsPsr4 = array();
|
|
|
|
|
|
|
|
// PSR-0
|
|
// PSR-0
|
|
|
/**
|
|
/**
|
|
|
- * List of PSR-0 prefixes
|
|
|
|
|
- *
|
|
|
|
|
- * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
|
|
|
|
|
- *
|
|
|
|
|
- * @var array<string, array<string, list<string>>>
|
|
|
|
|
|
|
+ * @var array[]
|
|
|
|
|
+ * @psalm-var array<string, array<string, string[]>>
|
|
|
*/
|
|
*/
|
|
|
private $prefixesPsr0 = array();
|
|
private $prefixesPsr0 = array();
|
|
|
/**
|
|
/**
|
|
|
- * @var list<string>
|
|
|
|
|
|
|
+ * @var array[]
|
|
|
|
|
+ * @psalm-var array<string, string>
|
|
|
*/
|
|
*/
|
|
|
private $fallbackDirsPsr0 = array();
|
|
private $fallbackDirsPsr0 = array();
|
|
|
|
|
|
|
@@ -80,7 +81,8 @@ class ClassLoader
|
|
|
private $useIncludePath = false;
|
|
private $useIncludePath = false;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * @var array<string, string>
|
|
|
|
|
|
|
+ * @var string[]
|
|
|
|
|
+ * @psalm-var array<string, string>
|
|
|
*/
|
|
*/
|
|
|
private $classMap = array();
|
|
private $classMap = array();
|
|
|
|
|
|
|
@@ -88,20 +90,21 @@ class ClassLoader
|
|
|
private $classMapAuthoritative = false;
|
|
private $classMapAuthoritative = false;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * @var array<string, bool>
|
|
|
|
|
|
|
+ * @var bool[]
|
|
|
|
|
+ * @psalm-var array<string, bool>
|
|
|
*/
|
|
*/
|
|
|
private $missingClasses = array();
|
|
private $missingClasses = array();
|
|
|
|
|
|
|
|
- /** @var string|null */
|
|
|
|
|
|
|
+ /** @var ?string */
|
|
|
private $apcuPrefix;
|
|
private $apcuPrefix;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * @var array<string, self>
|
|
|
|
|
|
|
+ * @var self[]
|
|
|
*/
|
|
*/
|
|
|
private static $registeredLoaders = array();
|
|
private static $registeredLoaders = array();
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * @param string|null $vendorDir
|
|
|
|
|
|
|
+ * @param ?string $vendorDir
|
|
|
*/
|
|
*/
|
|
|
public function __construct($vendorDir = null)
|
|
public function __construct($vendorDir = null)
|
|
|
{
|
|
{
|
|
@@ -110,7 +113,7 @@ class ClassLoader
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * @return array<string, list<string>>
|
|
|
|
|
|
|
+ * @return string[]
|
|
|
*/
|
|
*/
|
|
|
public function getPrefixes()
|
|
public function getPrefixes()
|
|
|
{
|
|
{
|
|
@@ -122,7 +125,8 @@ class ClassLoader
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * @return array<string, list<string>>
|
|
|
|
|
|
|
+ * @return array[]
|
|
|
|
|
+ * @psalm-return array<string, array<int, string>>
|
|
|
*/
|
|
*/
|
|
|
public function getPrefixesPsr4()
|
|
public function getPrefixesPsr4()
|
|
|
{
|
|
{
|
|
@@ -130,7 +134,8 @@ class ClassLoader
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * @return list<string>
|
|
|
|
|
|
|
+ * @return array[]
|
|
|
|
|
+ * @psalm-return array<string, string>
|
|
|
*/
|
|
*/
|
|
|
public function getFallbackDirs()
|
|
public function getFallbackDirs()
|
|
|
{
|
|
{
|
|
@@ -138,7 +143,8 @@ class ClassLoader
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * @return list<string>
|
|
|
|
|
|
|
+ * @return array[]
|
|
|
|
|
+ * @psalm-return array<string, string>
|
|
|
*/
|
|
*/
|
|
|
public function getFallbackDirsPsr4()
|
|
public function getFallbackDirsPsr4()
|
|
|
{
|
|
{
|
|
@@ -146,7 +152,8 @@ class ClassLoader
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * @return array<string, string> Array of classname => path
|
|
|
|
|
|
|
+ * @return string[] Array of classname => path
|
|
|
|
|
+ * @psalm-return array<string, string>
|
|
|
*/
|
|
*/
|
|
|
public function getClassMap()
|
|
public function getClassMap()
|
|
|
{
|
|
{
|
|
@@ -154,7 +161,8 @@ class ClassLoader
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * @param array<string, string> $classMap Class to filename map
|
|
|
|
|
|
|
+ * @param string[] $classMap Class to filename map
|
|
|
|
|
+ * @psalm-param array<string, string> $classMap
|
|
|
*
|
|
*
|
|
|
* @return void
|
|
* @return void
|
|
|
*/
|
|
*/
|
|
@@ -171,25 +179,24 @@ class ClassLoader
|
|
|
* Registers a set of PSR-0 directories for a given prefix, either
|
|
* Registers a set of PSR-0 directories for a given prefix, either
|
|
|
* appending or prepending to the ones previously set for this prefix.
|
|
* appending or prepending to the ones previously set for this prefix.
|
|
|
*
|
|
*
|
|
|
- * @param string $prefix The prefix
|
|
|
|
|
- * @param list<string>|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
|
|
* @return void
|
|
|
*/
|
|
*/
|
|
|
public function add($prefix, $paths, $prepend = false)
|
|
public function add($prefix, $paths, $prepend = false)
|
|
|
{
|
|
{
|
|
|
- $paths = (array) $paths;
|
|
|
|
|
if (!$prefix) {
|
|
if (!$prefix) {
|
|
|
if ($prepend) {
|
|
if ($prepend) {
|
|
|
$this->fallbackDirsPsr0 = array_merge(
|
|
$this->fallbackDirsPsr0 = array_merge(
|
|
|
- $paths,
|
|
|
|
|
|
|
+ (array) $paths,
|
|
|
$this->fallbackDirsPsr0
|
|
$this->fallbackDirsPsr0
|
|
|
);
|
|
);
|
|
|
} else {
|
|
} else {
|
|
|
$this->fallbackDirsPsr0 = array_merge(
|
|
$this->fallbackDirsPsr0 = array_merge(
|
|
|
$this->fallbackDirsPsr0,
|
|
$this->fallbackDirsPsr0,
|
|
|
- $paths
|
|
|
|
|
|
|
+ (array) $paths
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -198,19 +205,19 @@ class ClassLoader
|
|
|
|
|
|
|
|
$first = $prefix[0];
|
|
$first = $prefix[0];
|
|
|
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
|
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
|
|
- $this->prefixesPsr0[$first][$prefix] = $paths;
|
|
|
|
|
|
|
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
|
|
|
|
|
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
if ($prepend) {
|
|
if ($prepend) {
|
|
|
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
|
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
|
|
- $paths,
|
|
|
|
|
|
|
+ (array) $paths,
|
|
|
$this->prefixesPsr0[$first][$prefix]
|
|
$this->prefixesPsr0[$first][$prefix]
|
|
|
);
|
|
);
|
|
|
} else {
|
|
} else {
|
|
|
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
|
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
|
|
$this->prefixesPsr0[$first][$prefix],
|
|
$this->prefixesPsr0[$first][$prefix],
|
|
|
- $paths
|
|
|
|
|
|
|
+ (array) $paths
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -219,9 +226,9 @@ class ClassLoader
|
|
|
* Registers a set of PSR-4 directories for a given namespace, either
|
|
* Registers a set of PSR-4 directories for a given namespace, either
|
|
|
* appending or prepending to the ones previously set for this namespace.
|
|
* appending or prepending to the ones previously set for this namespace.
|
|
|
*
|
|
*
|
|
|
- * @param string $prefix The prefix/namespace, with trailing '\\'
|
|
|
|
|
- * @param list<string>|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
|
|
* @throws \InvalidArgumentException
|
|
|
*
|
|
*
|
|
@@ -229,18 +236,17 @@ class ClassLoader
|
|
|
*/
|
|
*/
|
|
|
public function addPsr4($prefix, $paths, $prepend = false)
|
|
public function addPsr4($prefix, $paths, $prepend = false)
|
|
|
{
|
|
{
|
|
|
- $paths = (array) $paths;
|
|
|
|
|
if (!$prefix) {
|
|
if (!$prefix) {
|
|
|
// Register directories for the root namespace.
|
|
// Register directories for the root namespace.
|
|
|
if ($prepend) {
|
|
if ($prepend) {
|
|
|
$this->fallbackDirsPsr4 = array_merge(
|
|
$this->fallbackDirsPsr4 = array_merge(
|
|
|
- $paths,
|
|
|
|
|
|
|
+ (array) $paths,
|
|
|
$this->fallbackDirsPsr4
|
|
$this->fallbackDirsPsr4
|
|
|
);
|
|
);
|
|
|
} else {
|
|
} else {
|
|
|
$this->fallbackDirsPsr4 = array_merge(
|
|
$this->fallbackDirsPsr4 = array_merge(
|
|
|
$this->fallbackDirsPsr4,
|
|
$this->fallbackDirsPsr4,
|
|
|
- $paths
|
|
|
|
|
|
|
+ (array) $paths
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
|
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
|
@@ -250,18 +256,18 @@ class ClassLoader
|
|
|
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
|
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
|
|
}
|
|
}
|
|
|
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
|
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
|
|
- $this->prefixDirsPsr4[$prefix] = $paths;
|
|
|
|
|
|
|
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
|
|
|
} elseif ($prepend) {
|
|
} elseif ($prepend) {
|
|
|
// Prepend directories for an already registered namespace.
|
|
// Prepend directories for an already registered namespace.
|
|
|
$this->prefixDirsPsr4[$prefix] = array_merge(
|
|
$this->prefixDirsPsr4[$prefix] = array_merge(
|
|
|
- $paths,
|
|
|
|
|
|
|
+ (array) $paths,
|
|
|
$this->prefixDirsPsr4[$prefix]
|
|
$this->prefixDirsPsr4[$prefix]
|
|
|
);
|
|
);
|
|
|
} else {
|
|
} else {
|
|
|
// Append directories for an already registered namespace.
|
|
// Append directories for an already registered namespace.
|
|
|
$this->prefixDirsPsr4[$prefix] = array_merge(
|
|
$this->prefixDirsPsr4[$prefix] = array_merge(
|
|
|
$this->prefixDirsPsr4[$prefix],
|
|
$this->prefixDirsPsr4[$prefix],
|
|
|
- $paths
|
|
|
|
|
|
|
+ (array) $paths
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -270,8 +276,8 @@ class ClassLoader
|
|
|
* Registers a set of PSR-0 directories for a given prefix,
|
|
* Registers a set of PSR-0 directories for a given prefix,
|
|
|
* replacing any others previously set for this prefix.
|
|
* replacing any others previously set for this prefix.
|
|
|
*
|
|
*
|
|
|
- * @param string $prefix The prefix
|
|
|
|
|
- * @param list<string>|string $paths The PSR-0 base directories
|
|
|
|
|
|
|
+ * @param string $prefix The prefix
|
|
|
|
|
+ * @param string[]|string $paths The PSR-0 base directories
|
|
|
*
|
|
*
|
|
|
* @return void
|
|
* @return void
|
|
|
*/
|
|
*/
|
|
@@ -288,8 +294,8 @@ class ClassLoader
|
|
|
* Registers a set of PSR-4 directories for a given namespace,
|
|
* Registers a set of PSR-4 directories for a given namespace,
|
|
|
* replacing any others previously set for this namespace.
|
|
* replacing any others previously set for this namespace.
|
|
|
*
|
|
*
|
|
|
- * @param string $prefix The prefix/namespace, with trailing '\\'
|
|
|
|
|
- * @param list<string>|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
|
|
* @throws \InvalidArgumentException
|
|
|
*
|
|
*
|
|
@@ -475,9 +481,9 @@ class ClassLoader
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * Returns the currently registered loaders keyed by their corresponding vendor directories.
|
|
|
|
|
|
|
+ * Returns the currently registered loaders indexed by their corresponding vendor directories.
|
|
|
*
|
|
*
|
|
|
- * @return array<string, self>
|
|
|
|
|
|
|
+ * @return self[]
|
|
|
*/
|
|
*/
|
|
|
public static function getRegisteredLoaders()
|
|
public static function getRegisteredLoaders()
|
|
|
{
|
|
{
|