Split StubObject.php to have one class in one file
[lhc/web/wiklou.git] / includes / StubObject.php
index 0b4d048..1583dbf 100644 (file)
@@ -19,6 +19,7 @@
  *
  * @file
  */
+use Wikimedia\ObjectFactory;
 
 /**
  * Class to implement stub globals, which are globals that delay loading the
@@ -48,19 +49,25 @@ class StubObject {
        /** @var null|string */
        protected $class;
 
+       /** @var null|callable */
+       protected $factory;
+
        /** @var array */
        protected $params;
 
        /**
-        * Constructor.
-        *
-        * @param string $global Name of the global variable.
-        * @param string $class Name of the class of the real object.
+        * @param string|null $global Name of the global variable.
+        * @param string|callable|null $class Name of the class of the real object
+        *                               or a factory function to call
         * @param array $params Parameters to pass to constructor of the real object.
         */
        public function __construct( $global = null, $class = null, $params = [] ) {
                $this->global = $global;
-               $this->class = $class;
+               if ( is_callable( $class ) ) {
+                       $this->factory = $class;
+               } else {
+                       $this->class = $class;
+               }
                $this->params = $params;
        }
 
@@ -80,7 +87,7 @@ class StubObject {
         * infinite loop when unstubbing an object or to avoid reference parameter
         * breakage.
         *
-        * @param object $obj Object to check.
+        * @param object &$obj Object to check.
         * @return void
         */
        public static function unstub( &$obj ) {
@@ -110,8 +117,10 @@ class StubObject {
         * @return object
         */
        public function _newObject() {
-               return ObjectFactory::getObjectFromSpec( [
-                       'class' => $this->class,
+               $params = $this->factory
+                       ? [ 'factory' => $this->factory ]
+                       : [ 'class' => $this->class ];
+               return ObjectFactory::getObjectFromSpec( $params + [
                        'args' => $this->params,
                        'closure_expansion' => false,
                ] );
@@ -162,38 +171,3 @@ class StubObject {
                }
        }
 }
-
-/**
- * Stub object for the user language. Assigned to the $wgLang global.
- */
-class StubUserLang extends StubObject {
-
-       public function __construct() {
-               parent::__construct( 'wgLang' );
-       }
-
-       /**
-        * Call Language::findVariantLink after unstubbing $wgLang.
-        *
-        * This method is implemented with a full signature rather than relying on
-        * __call so that the pass-by-reference signature of the proxied method is
-        * honored.
-        *
-        * @param string &$link The name of the link
-        * @param Title &$nt The title object of the link
-        * @param bool $ignoreOtherCond To disable other conditions when
-        *   we need to transclude a template or update a category's link
-        */
-       public function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
-               global $wgLang;
-               $this->_unstub( 'findVariantLink', 3 );
-               $wgLang->findVariantLink( $link, $nt, $ignoreOtherCond );
-       }
-
-       /**
-        * @return Language
-        */
-       public function _newObject() {
-               return RequestContext::getMain()->getLanguage();
-       }
-}