*
* @file
*/
+use Wikimedia\ObjectFactory;
/**
* Class to implement stub globals, which are globals that delay loading the
/** @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;
}
* 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 ) {
* @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,
] );
}
}
}
-
-/**
- * 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();
- }
-}