|
@@ -42,6 +42,8 @@ namespace Composer\Autoload;
|
|
|
*/
|
|
|
class ClassLoader
|
|
|
{
|
|
|
+ private $vendorDir;
|
|
|
+
|
|
|
// PSR-4
|
|
|
private $prefixLengthsPsr4 = array();
|
|
|
private $prefixDirsPsr4 = array();
|
|
@@ -57,6 +59,13 @@ class ClassLoader
|
|
|
private $missingClasses = array();
|
|
|
private $apcuPrefix;
|
|
|
|
|
|
+ private static $registeredLoaders = array();
|
|
|
+
|
|
|
+ public function __construct($vendorDir = null)
|
|
|
+ {
|
|
|
+ $this->vendorDir = $vendorDir;
|
|
|
+ }
|
|
|
+
|
|
|
public function getPrefixes()
|
|
|
{
|
|
|
if (!empty($this->prefixesPsr0)) {
|
|
@@ -300,6 +309,15 @@ class ClassLoader
|
|
|
public function register($prepend = false)
|
|
|
{
|
|
|
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
|
|
+
|
|
|
+ if (null === $this->vendorDir) {
|
|
|
+ //no-op
|
|
|
+ } elseif ($prepend) {
|
|
|
+ self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
|
|
|
+ } else {
|
|
|
+ unset(self::$registeredLoaders[$this->vendorDir]);
|
|
|
+ self::$registeredLoaders[$this->vendorDir] = $this;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -308,6 +326,10 @@ class ClassLoader
|
|
|
public function unregister()
|
|
|
{
|
|
|
spl_autoload_unregister(array($this, 'loadClass'));
|
|
|
+
|
|
|
+ if (null !== $this->vendorDir) {
|
|
|
+ unset(self::$registeredLoaders[$this->vendorDir]);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -367,6 +389,16 @@ class ClassLoader
|
|
|
return $file;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Returns the currently registered loaders indexed by their corresponding vendor directories.
|
|
|
+ *
|
|
|
+ * @return self[]
|
|
|
+ */
|
|
|
+ public static function getRegisteredLoaders()
|
|
|
+ {
|
|
|
+ return self::$registeredLoaders;
|
|
|
+ }
|
|
|
+
|
|
|
private function findFileWithExtension($class, $ext)
|
|
|
{
|
|
|
// PSR-4 lookup
|