Browse Source

Merge pull request #6973 from nicolas-grekas/fix-autoloader

Fix BC of generated static map
Jordi Boggiano 7 years ago
parent
commit
ebc3c7d0da

+ 1 - 4
src/Composer/Autoload/AutoloadGenerator.php

@@ -785,10 +785,7 @@ HEADER;
 
         // BC handling when converting to a new ClassLoader
         if (isset($maps['prefixLengthsPsr4'])) {
-            $maps['firstCharsPsr4'] = array_map(function () {
-                return true;
-            }, $maps['prefixLengthsPsr4']);
-            unset($maps['prefixLengthsPsr4']);
+            $maps['firstCharsPsr4'] = array_map('is_array', $maps['prefixLengthsPsr4']);
         }
 
         foreach ($maps as $prop => $value) {

+ 4 - 3
src/Composer/Autoload/ClassLoader.php

@@ -44,6 +44,7 @@ class ClassLoader
 {
     // PSR-4
     private $firstCharsPsr4 = array();
+    private $prefixLengthsPsr4 = array(); // For BC with legacy static maps
     private $prefixDirsPsr4 = array();
     private $fallbackDirsPsr4 = array();
 
@@ -371,15 +372,15 @@ class ClassLoader
         $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
 
         $first = $class[0];
-        if (isset($this->firstCharsPsr4[$first])) {
+        if (isset($this->firstCharsPsr4[$first]) || isset($this->prefixLengthsPsr4[$first])) {
             $subPath = $class;
             while (false !== $lastPos = strrpos($subPath, '\\')) {
                 $subPath = substr($subPath, 0, $lastPos);
                 $search = $subPath.'\\';
                 if (isset($this->prefixDirsPsr4[$search])) {
-                    $pathEnd = substr($logicalPathPsr4, $lastPos + 1);
+                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
                     foreach ($this->prefixDirsPsr4[$search] as $dir) {
-                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $pathEnd)) {
+                        if (file_exists($file = $dir . $pathEnd)) {
                             return $file;
                         }
                     }