registration: Initialize PSR-4 namespaces at same stage as normal autoloader
[lhc/web/wiklou.git] / includes / registration / ExtensionRegistry.php
index ae1ab58..0eb6a9b 100644 (file)
@@ -20,9 +20,16 @@ class ExtensionRegistry {
 
        /**
         * Version of the highest supported manifest version
+        * Note: Update MANIFEST_VERSION_MW_VERSION when changing this
         */
        const MANIFEST_VERSION = 2;
 
+       /**
+        * MediaWiki version constraint representing what the current
+        * highest MANIFEST_VERSION is supported in
+        */
+       const MANIFEST_VERSION_MW_VERSION = '>= 1.29.0';
+
        /**
         * Version of the oldest supported manifest version
         */
@@ -75,6 +82,7 @@ class ExtensionRegistry {
        private static $instance;
 
        /**
+        * @codeCoverageIgnore
         * @return ExtensionRegistry
         */
        public static function getInstance() {
@@ -98,9 +106,11 @@ class ExtensionRegistry {
                        } else {
                                throw new Exception( "$path does not exist!" );
                        }
+                       // @codeCoverageIgnoreStart
                        if ( !$mtime ) {
                                $err = error_get_last();
                                throw new Exception( "Couldn't stat $path: {$err['message']}" );
+                               // @codeCoverageIgnoreEnd
                        }
                }
                $this->queued[$path] = $mtime;
@@ -192,6 +202,7 @@ class ExtensionRegistry {
         * @param array $queue keys are filenames, values are ignored
         * @return array extracted info
         * @throws Exception
+        * @throws ExtensionDependencyError
         */
        public function readFromQueue( array $queue ) {
                global $wgVersion;
@@ -235,6 +246,7 @@ class ExtensionRegistry {
                        }
                        if ( isset( $info['AutoloadNamespaces'] ) ) {
                                $autoloadNamespaces += $this->processAutoLoader( $dir, $info['AutoloadNamespaces'] );
+                               AutoLoader::$psr4Namespaces += $autoloadNamespaces;
                        }
 
                        // get all requirements/dependencies for this extension
@@ -263,11 +275,7 @@ class ExtensionRegistry {
                );
 
                if ( $incompatible ) {
-                       if ( count( $incompatible ) === 1 ) {
-                               throw new Exception( $incompatible[0] );
-                       } else {
-                               throw new Exception( implode( "\n", $incompatible ) );
-                       }
+                       throw new ExtensionDependencyError( $incompatible );
                }
 
                // Need to set this so we can += to it later
@@ -399,16 +407,6 @@ class ExtensionRegistry {
                return $this->loaded;
        }
 
-       /**
-        * Mark a thing as loaded
-        *
-        * @param string $name
-        * @param array $credits
-        */
-       protected function markLoaded( $name, array $credits ) {
-               $this->loaded[$name] = $credits;
-       }
-
        /**
         * Fully expand autoloader paths
         *