Fix the namespace of SpecialPageFactory

Follows-up d4045035b0.

This class was added to the MediaWiki\Special namespace, contrary to the
plan in T166010 which reserves that namespace for core special pages.
Instead, use MediaWiki\SpecialPage, following the directory in which it
is located.

Also, fix two bugs which prevented the introduction of a namespaced
class alias.

Bug: T166010
Change-Id: I6e31340aaae32a89beb7e45b79d76a7fea9808d2
This commit is contained in:
Tim Starling 2020-02-21 11:01:43 +11:00
parent d109281079
commit 44d51cb04e
13 changed files with 39 additions and 14 deletions

View file

@ -491,6 +491,9 @@ because of Phabricator reports.
- LogPage::addEntry
* Article::insertProtectNullRevision is deprecated. Instead, use
WikiPage::insertProtectNullRevision.
* The SpecialPageFactory class was moved from the MediaWiki\Special namespace
to the MediaWiki\SpecialPage namespace. The old location remains as a
deprecated alias.
* …
=== Other changes in 1.35 ===

View file

@ -924,6 +924,7 @@ $wgAutoloadLocalClasses = [
'MediaWiki\\Search\\SearchWidgets\\SimpleSearchResultWidget' => __DIR__ . '/includes/search/searchwidgets/SimpleSearchResultWidget.php',
'MediaWiki\\ShellDisabledError' => __DIR__ . '/includes/exception/ShellDisabledError.php',
'MediaWiki\\Site\\MediaWikiPageNameNormalizer' => __DIR__ . '/includes/site/MediaWikiPageNameNormalizer.php',
'MediaWiki\\SpecialPage\\SpecialPageFactory' => __DIR__ . '/includes/specialpage/SpecialPageFactory.php',
'MediaWiki\\Special\\SpecialPageFactory' => __DIR__ . '/includes/specialpage/SpecialPageFactory.php',
'MediaWiki\\Storage\\IncompleteRevisionException' => __DIR__ . '/includes/Revision/IncompleteRevisionException.php',
'MediaWiki\\Storage\\MutableRevisionRecord' => __DIR__ . '/includes/Revision/MutableRevisionRecord.php',

View file

@ -51,7 +51,7 @@ use MediaWiki\Revision\RevisionStore;
use MediaWiki\Revision\RevisionStoreFactory;
use MediaWiki\Revision\SlotRoleRegistry;
use MediaWiki\Shell\CommandFactory;
use MediaWiki\Special\SpecialPageFactory;
use MediaWiki\SpecialPage\SpecialPageFactory;
use MediaWiki\Storage\BlobStore;
use MediaWiki\Storage\BlobStoreFactory;
use MediaWiki\Storage\NameTableStore;

View file

@ -28,7 +28,7 @@ use MediaWiki\Linker\LinkTarget;
use MediaWiki\Revision\RevisionLookup;
use MediaWiki\Revision\RevisionRecord;
use MediaWiki\Session\SessionManager;
use MediaWiki\Special\SpecialPageFactory;
use MediaWiki\SpecialPage\SpecialPageFactory;
use MediaWiki\User\UserIdentity;
use MessageSpecifier;
use NamespaceInfo;

View file

@ -81,7 +81,7 @@ use MediaWiki\Revision\RevisionStore;
use MediaWiki\Revision\RevisionStoreFactory;
use MediaWiki\Revision\SlotRoleRegistry;
use MediaWiki\Shell\CommandFactory;
use MediaWiki\Special\SpecialPageFactory;
use MediaWiki\SpecialPage\SpecialPageFactory;
use MediaWiki\Storage\BlobStore;
use MediaWiki\Storage\BlobStoreFactory;
use MediaWiki\Storage\NameTableStoreFactory;

View file

@ -21,7 +21,7 @@
*/
use MediaWiki\MediaWikiServices;
use MediaWiki\Special\SpecialPageFactory;
use MediaWiki\SpecialPage\SpecialPageFactory;
/**
* Query module to get the results of a QueryPage-based special page

View file

@ -28,7 +28,7 @@ use MediaWiki\Linker\LinkRenderer;
use MediaWiki\Linker\LinkRendererFactory;
use MediaWiki\Linker\LinkTarget;
use MediaWiki\MediaWikiServices;
use MediaWiki\Special\SpecialPageFactory;
use MediaWiki\SpecialPage\SpecialPageFactory;
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use Wikimedia\IPUtils;

View file

@ -23,7 +23,7 @@ use MediaWiki\BadFileLookup;
use MediaWiki\Config\ServiceOptions;
use MediaWiki\Languages\LanguageConverterFactory;
use MediaWiki\Linker\LinkRendererFactory;
use MediaWiki\Special\SpecialPageFactory;
use MediaWiki\SpecialPage\SpecialPageFactory;
use Psr\Log\LoggerInterface;
/**

View file

@ -22,7 +22,7 @@
* @defgroup SpecialPage SpecialPage
*/
namespace MediaWiki\Special;
namespace MediaWiki\SpecialPage;
use Hooks;
use IContextSource;
@ -765,3 +765,6 @@ class SpecialPageFactory {
return null;
}
}
/** @deprecated since 1.35, use MediaWiki\\SpecialPage\\SpecialPageFactory */
class_alias( SpecialPageFactory::class, 'MediaWiki\\Special\\SpecialPageFactory' );

View file

@ -182,7 +182,7 @@ class ClassCollector {
if ( $this->alias['target'] === true ) {
// We already saw a first argument, this must be the second.
// Strip quotes from the string literal.
$this->alias['name'] = substr( $token[1], 1, -1 );
$this->alias['name'] = self::stripQuotes( $token[1] );
}
} elseif ( $token === ')' ) {
// End of function call
@ -212,6 +212,19 @@ class ClassCollector {
}
}
/**
* Decode a quoted PHP string, interpreting escape sequences, like eval($str).
* The implementation is half-baked, but the character set allowed in class
* names is pretty small. This could be replaced by a call to a fully-baked
* utility function.
*
* @param string $str
* @return string
*/
private static function stripQuotes( $str ) {
return str_replace( '\\\\', '\\', substr( $str, 1, -1 ) );
}
/**
* Returns the string representation of the tokens within the
* current expect sequence and resets the sequence.

View file

@ -21,7 +21,7 @@ use Wikimedia\ScopedCallback;
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @covers \MediaWiki\Special\SpecialPageFactory
* @covers \MediaWiki\SpecialPage\SpecialPageFactory
* @group SpecialPage
*/
class SpecialPageFactoryTest extends MediaWikiTestCase {
@ -269,7 +269,7 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
}
/**
* @covers \MediaWiki\Special\SpecialPageFactory::getPage
* @covers \MediaWiki\SpecialPage\SpecialPageFactory::getPage
*/
public function testSpecialPageCreationThatRequiresService() {
$type = null;
@ -291,6 +291,6 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
SpecialPageFactory::getPage( 'TestPage' );
$this->assertEquals( \MediaWiki\Special\SpecialPageFactory::class, $type );
$this->assertEquals( \MediaWiki\SpecialPage\SpecialPageFactory::class, $type );
}
}

View file

@ -115,16 +115,21 @@ class AutoLoaderStructureTest extends MediaWikiTestCase {
$classesInFile[$class] = true;
} elseif ( !empty( $match['original'] ) ) {
// 'class_alias( "Foo", "Bar" );'
$aliasesInFile[$match['alias']] = $match['original'];
$aliasesInFile[self::removeSlashes( $match['alias'] )] = $match['original'];
} else {
// 'class_alias( Foo::class, "Bar" );'
$aliasesInFile[$match['aliasString']] = $fileNamespace . $match['originalStatic'];
$aliasesInFile[self::removeSlashes( $match['aliasString'] )] =
$fileNamespace . $match['originalStatic'];
}
}
return [ $classesInFile, $aliasesInFile ];
}
private static function removeSlashes( $str ) {
return str_replace( '\\\\', '\\', $str );
}
protected static function checkAutoLoadConf() {
global $wgAutoloadLocalClasses, $wgAutoloadClasses, $IP;

View file

@ -3,7 +3,7 @@ use MediaWiki\BadFileLookup;
use MediaWiki\Config\ServiceOptions;
use MediaWiki\Languages\LanguageConverterFactory;
use MediaWiki\Linker\LinkRendererFactory;
use MediaWiki\Special\SpecialPageFactory;
use MediaWiki\SpecialPage\SpecialPageFactory;
use Psr\Log\LoggerInterface;
use Wikimedia\TestingAccessWrapper;