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