resourceloader: Remove support for 'object' in wgResourceModules

Obsolete since MediaWiki 1.17alpha, no known usage since.

Bug: T222637
Change-Id: Ie820b16022ced6767c32aee7f2497a99260b1641
This commit is contained in:
Timo Tijhof 2019-07-11 18:09:23 +01:00
parent 1fc5525ebd
commit 9bee7ab8a1
3 changed files with 21 additions and 34 deletions

View file

@ -283,6 +283,9 @@ because of Phabricator reports.
which were deprecated and ignored by core since 1.22, are no longer set to any
value, and SkinTemplate no longer emits a 'jsmimetype' key. Any extensions not
updated since 2013 to cope with this deprecation may now break.
* (T222637) Passing ResourceLoaderModule objects to ResourceLoader::register()
or $wgResourceModules is no longer supported.
Use the 'class' or 'factory' option of the array format instead.
* …
=== Deprecations in 1.34 ===

View file

@ -297,13 +297,13 @@ class ResourceLoader implements LoggerAwareInterface {
/**
* Register a module with the ResourceLoader system.
*
* @param mixed $name Name of module as a string or List of name/object pairs as an array
* @param array|null $info Module info array. For backwards compatibility with 1.17alpha,
* this may also be a ResourceLoaderModule object. Optional when using
* multiple-registration calling style.
* @param string|array[] $name Module name as a string or, array of module info arrays
* keyed by name.
* @param array|null $info Module info array. When using the first parameter to register
* multiple modules at once, this parameter is optional.
* @throws MWException If a duplicate module registration is attempted
* @throws MWException If a module name contains illegal characters (pipes or commas)
* @throws MWException If something other than a ResourceLoaderModule is being registered
* @throws InvalidArgumentException If the module info is not an array
*/
public function register( $name, $info = null ) {
$moduleSkinStyles = $this->config->get( 'ResourceModuleSkinStyles' );
@ -320,29 +320,21 @@ class ResourceLoader implements LoggerAwareInterface {
);
}
// Check $name for validity
// Check validity
if ( !self::isValidModuleName( $name ) ) {
throw new MWException( "ResourceLoader module name '$name' is invalid, "
. "see ResourceLoader::isValidModuleName()" );
}
// Attach module
if ( $info instanceof ResourceLoaderModule ) {
$this->moduleInfos[$name] = [ 'object' => $info ];
$info->setName( $name );
$this->modules[$name] = $info;
} elseif ( is_array( $info ) ) {
// New calling convention
$this->moduleInfos[$name] = $info;
} else {
throw new MWException(
'ResourceLoader module info type error for module \'' . $name .
'\': expected ResourceLoaderModule or array (got: ' . gettype( $info ) . ')'
if ( !is_array( $info ) ) {
throw new InvalidArgumentException(
'Invalid module info for "' . $name . '": expected array, got ' . gettype( $info )
);
}
// Last-minute changes
// Attach module
$this->moduleInfos[$name] = $info;
// Last-minute changes
// Apply custom skin-defined styles to existing modules.
if ( $this->isFileModule( $name ) ) {
foreach ( $moduleSkinStyles as $skinName => $skinStyles ) {
@ -528,23 +520,18 @@ class ResourceLoader implements LoggerAwareInterface {
// No such module
return null;
}
// Construct the requested object
// Construct the requested module object
$info = $this->moduleInfos[$name];
/** @var ResourceLoaderModule $object */
if ( isset( $info['object'] ) ) {
// Object given in info array
$object = $info['object'];
} elseif ( isset( $info['factory'] ) ) {
if ( isset( $info['factory'] ) ) {
/** @var ResourceLoaderModule $object */
$object = call_user_func( $info['factory'], $info );
$object->setConfig( $this->getConfig() );
$object->setLogger( $this->logger );
} else {
$class = $info['class'] ?? ResourceLoaderFileModule::class;
/** @var ResourceLoaderModule $object */
$object = new $class( $info );
$object->setConfig( $this->getConfig() );
$object->setLogger( $this->logger );
}
$object->setConfig( $this->getConfig() );
$object->setLogger( $this->logger );
$object->setName( $name );
$this->modules[$name] = $object;
}
@ -563,9 +550,6 @@ class ResourceLoader implements LoggerAwareInterface {
return false;
}
$info = $this->moduleInfos[$name];
if ( isset( $info['object'] ) ) {
return false;
}
return !isset( $info['factory'] ) && (
// The implied default for 'class' is ResourceLoaderFileModule
!isset( $info['class'] ) ||

View file

@ -113,7 +113,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
*/
public function testRegisterInvalidType() {
$resourceLoader = new EmptyResourceLoader();
$this->setExpectedException( MWException::class, 'ResourceLoader module info type error' );
$this->setExpectedException( InvalidArgumentException::class, 'Invalid module info' );
$resourceLoader->register( 'test', new stdClass() );
}