4242 */ 
4343class  ClassLoader
4444{
45+     /** @var ?string */ 
4546    private  $ vendorDir ;
4647
4748    // PSR-4 
49+     /** 
50+      * @var array[] 
51+      * @psalm-var array<string, array<string, int>> 
52+      */ 
4853    private  $ prefixLengthsPsr4  = array ();
54+     /** 
55+      * @var array[] 
56+      * @psalm-var array<string, array<int, string>> 
57+      */ 
4958    private  $ prefixDirsPsr4  = array ();
59+     /** 
60+      * @var array[] 
61+      * @psalm-var array<string, string> 
62+      */ 
5063    private  $ fallbackDirsPsr4  = array ();
5164
5265    // PSR-0 
66+     /** 
67+      * @var array[] 
68+      * @psalm-var array<string, array<string, string[]>> 
69+      */ 
5370    private  $ prefixesPsr0  = array ();
71+     /** 
72+      * @var array[] 
73+      * @psalm-var array<string, string> 
74+      */ 
5475    private  $ fallbackDirsPsr0  = array ();
5576
77+     /** @var bool */ 
5678    private  $ useIncludePath  = false ;
79+ 
80+     /** 
81+      * @var string[] 
82+      * @psalm-var array<string, string> 
83+      */ 
5784    private  $ classMap  = array ();
85+ 
86+     /** @var bool */ 
5887    private  $ classMapAuthoritative  = false ;
88+ 
89+     /** 
90+      * @var bool[] 
91+      * @psalm-var array<string, bool> 
92+      */ 
5993    private  $ missingClasses  = array ();
94+ 
95+     /** @var ?string */ 
6096    private  $ apcuPrefix ;
6197
98+     /** 
99+      * @var self[] 
100+      */ 
62101    private  static  $ registeredLoaders  = array ();
63102
103+     /** 
104+      * @param ?string $vendorDir 
105+      */ 
64106    public  function  __construct ($ vendorDir  = null )
65107    {
66108        $ this  ->vendorDir  = $ vendorDir ;
67109    }
68110
111+     /** 
112+      * @return string[] 
113+      */ 
69114    public  function  getPrefixes ()
70115    {
71116        if  (!empty ($ this  ->prefixesPsr0 )) {
@@ -75,28 +120,47 @@ public function getPrefixes()
75120        return  array ();
76121    }
77122
123+     /** 
124+      * @return array[] 
125+      * @psalm-return array<string, array<int, string>> 
126+      */ 
78127    public  function  getPrefixesPsr4 ()
79128    {
80129        return  $ this  ->prefixDirsPsr4 ;
81130    }
82131
132+     /** 
133+      * @return array[] 
134+      * @psalm-return array<string, string> 
135+      */ 
83136    public  function  getFallbackDirs ()
84137    {
85138        return  $ this  ->fallbackDirsPsr0 ;
86139    }
87140
141+     /** 
142+      * @return array[] 
143+      * @psalm-return array<string, string> 
144+      */ 
88145    public  function  getFallbackDirsPsr4 ()
89146    {
90147        return  $ this  ->fallbackDirsPsr4 ;
91148    }
92149
150+     /** 
151+      * @return string[] Array of classname => path 
152+      * @psalm-return array<string, string> 
153+      */ 
93154    public  function  getClassMap ()
94155    {
95156        return  $ this  ->classMap ;
96157    }
97158
98159    /** 
99-      * @param array $classMap Class to filename map 
160+      * @param string[] $classMap Class to filename map 
161+      * @psalm-param array<string, string> $classMap 
162+      * 
163+      * @return void 
100164     */ 
101165    public  function  addClassMap (array  $ classMap )
102166    {
@@ -111,9 +175,11 @@ public function addClassMap(array $classMap)
111175     * Registers a set of PSR-0 directories for a given prefix, either 
112176     * appending or prepending to the ones previously set for this prefix. 
113177     * 
114-      * @param string       $prefix  The prefix 
115-      * @param array|string $paths   The PSR-0 root directories 
116-      * @param bool         $prepend Whether to prepend the directories 
178+      * @param string          $prefix  The prefix 
179+      * @param string[]|string $paths   The PSR-0 root directories 
180+      * @param bool            $prepend Whether to prepend the directories 
181+      * 
182+      * @return void 
117183     */ 
118184    public  function  add ($ prefix , $ paths , $ prepend  = false )
119185    {
@@ -156,11 +222,13 @@ public function add($prefix, $paths, $prepend = false)
156222     * Registers a set of PSR-4 directories for a given namespace, either 
157223     * appending or prepending to the ones previously set for this namespace. 
158224     * 
159-      * @param string       $prefix  The prefix/namespace, with trailing '\\' 
160-      * @param array |string $paths   The PSR-4 base directories 
161-      * @param bool         $prepend Whether to prepend the directories 
225+      * @param string           $prefix  The prefix/namespace, with trailing '\\' 
226+      * @param string[] |string $paths   The PSR-4 base directories 
227+      * @param bool             $prepend Whether to prepend the directories 
162228     * 
163229     * @throws \InvalidArgumentException 
230+      * 
231+      * @return void 
164232     */ 
165233    public  function  addPsr4 ($ prefix , $ paths , $ prepend  = false )
166234    {
@@ -204,8 +272,10 @@ public function addPsr4($prefix, $paths, $prepend = false)
204272     * Registers a set of PSR-0 directories for a given prefix, 
205273     * replacing any others previously set for this prefix. 
206274     * 
207-      * @param string       $prefix The prefix 
208-      * @param array|string $paths  The PSR-0 base directories 
275+      * @param string          $prefix The prefix 
276+      * @param string[]|string $paths  The PSR-0 base directories 
277+      * 
278+      * @return void 
209279     */ 
210280    public  function  set ($ prefix , $ paths )
211281    {
@@ -220,10 +290,12 @@ public function set($prefix, $paths)
220290     * Registers a set of PSR-4 directories for a given namespace, 
221291     * replacing any others previously set for this namespace. 
222292     * 
223-      * @param string       $prefix The prefix/namespace, with trailing '\\' 
224-      * @param array |string $paths  The PSR-4 base directories 
293+      * @param string           $prefix The prefix/namespace, with trailing '\\' 
294+      * @param string[] |string $paths  The PSR-4 base directories 
225295     * 
226296     * @throws \InvalidArgumentException 
297+      * 
298+      * @return void 
227299     */ 
228300    public  function  setPsr4 ($ prefix , $ paths )
229301    {
@@ -243,6 +315,8 @@ public function setPsr4($prefix, $paths)
243315     * Turns on searching the include path for class files. 
244316     * 
245317     * @param bool $useIncludePath 
318+      * 
319+      * @return void 
246320     */ 
247321    public  function  setUseIncludePath ($ useIncludePath )
248322    {
@@ -265,6 +339,8 @@ public function getUseIncludePath()
265339     * that have not been registered with the class map. 
266340     * 
267341     * @param bool $classMapAuthoritative 
342+      * 
343+      * @return void 
268344     */ 
269345    public  function  setClassMapAuthoritative ($ classMapAuthoritative )
270346    {
@@ -285,6 +361,8 @@ public function isClassMapAuthoritative()
285361     * APCu prefix to use to cache found/not-found classes, if the extension is enabled. 
286362     * 
287363     * @param string|null $apcuPrefix 
364+      * 
365+      * @return void 
288366     */ 
289367    public  function  setApcuPrefix ($ apcuPrefix )
290368    {
@@ -305,14 +383,18 @@ public function getApcuPrefix()
305383     * Registers this instance as an autoloader. 
306384     * 
307385     * @param bool $prepend Whether to prepend the autoloader or not 
386+      * 
387+      * @return void 
308388     */ 
309389    public  function  register ($ prepend  = false )
310390    {
311391        spl_autoload_register (array ($ this  , 'loadClass ' ), true , $ prepend );
312392
313393        if  (null  === $ this  ->vendorDir ) {
314-             //no-op 
315-         } elseif  ($ prepend ) {
394+             return ;
395+         }
396+ 
397+         if  ($ prepend ) {
316398            self ::$ registeredLoaders  = array ($ this  ->vendorDir  => $ this  ) + self ::$ registeredLoaders ;
317399        } else  {
318400            unset(self ::$ registeredLoaders [$ this  ->vendorDir ]);
@@ -322,6 +404,8 @@ public function register($prepend = false)
322404
323405    /** 
324406     * Unregisters this instance as an autoloader. 
407+      * 
408+      * @return void 
325409     */ 
326410    public  function  unregister ()
327411    {
@@ -336,7 +420,7 @@ public function unregister()
336420     * Loads the given class or interface. 
337421     * 
338422     * @param  string    $class The name of the class 
339-      * @return bool |null True if loaded, null otherwise 
423+      * @return true |null True if loaded, null otherwise 
340424     */ 
341425    public  function  loadClass ($ class )
342426    {
@@ -345,6 +429,8 @@ public function loadClass($class)
345429
346430            return  true ;
347431        }
432+ 
433+         return  null ;
348434    }
349435
350436    /** 
@@ -399,6 +485,11 @@ public static function getRegisteredLoaders()
399485        return  self ::$ registeredLoaders ;
400486    }
401487
488+     /** 
489+      * @param  string       $class 
490+      * @param  string       $ext 
491+      * @return string|false 
492+      */ 
402493    private  function  findFileWithExtension ($ class , $ ext )
403494    {
404495        // PSR-4 lookup 
@@ -470,6 +561,10 @@ private function findFileWithExtension($class, $ext)
470561 * Scope isolated include. 
471562 * 
472563 * Prevents access to $this/self from included files. 
564+  * 
565+  * @param  string $file 
566+  * @return void 
567+  * @private 
473568 */ 
474569function  includeFile ($ file )
475570{
0 commit comments