Convert MessageCache to service

Depends-On: Ia70e6c75f6e8a533f20cd44ebb05e013678e9951
Depends-On: I546eda0377f3a50843144b1450d3fbe8e4e02a8a
Change-Id: I305539a8598535a73e5cd280b2becdafa740ef97
This commit is contained in:
Aryeh Gregor 2019-04-08 18:21:49 +03:00
parent b62b871499
commit 752e7dd707
8 changed files with 37 additions and 50 deletions

View file

@ -343,7 +343,8 @@ because of Phabricator reports.
Use IDatabase::getDomainID() instead.
* (T191231) Support for using Oracle or MSSQL as database backends has been
dropped.
* …
* MessageCache::destroyInstance() has been removed. Instead, call
MediaWikiTestCase::resetServices().
=== Deprecations in 1.34 ===
* The MWNamespace class is deprecated. Use NamespaceInfo.
@ -446,6 +447,8 @@ because of Phabricator reports.
deprecation above this method is no longer needed/called and should not be
implemented by SearchEngine implementation.
* IDatabase::bufferResults() has been deprecated. Use query batching instead.
* MessageCache::singleton() is deprecated. Use
MediaWikiServices::getMessageCache().
=== Other changes in 1.34 ===
* …

View file

@ -40,6 +40,7 @@ use MediaWiki\Config\ConfigRepository;
use MediaWiki\Linker\LinkRenderer;
use MediaWiki\Linker\LinkRendererFactory;
use MWException;
use MessageCache;
use MimeAnalyzer;
use NamespaceInfo;
use ObjectCache;
@ -689,6 +690,14 @@ class MediaWikiServices extends ServiceContainer {
return $this->getService( 'MediaHandlerFactory' );
}
/**
* @since 1.34
* @return MessageCache
*/
public function getMessageCache() : MessageCache {
return $this->getService( 'MessageCache' );
}
/**
* @since 1.28
* @return MimeAnalyzer

View file

@ -319,6 +319,20 @@ return [
);
},
'MessageCache' => function ( MediaWikiServices $services ) : MessageCache {
$mainConfig = $services->getMainConfig();
return new MessageCache(
$services->getMainWANObjectCache(),
ObjectCache::getInstance( $mainConfig->get( 'MessageCacheType' ) ),
$mainConfig->get( 'UseLocalMessageCache' )
? $services->getLocalServerObjectCache()
: new EmptyBagOStuff(),
$mainConfig->get( 'UseDatabaseMessages' ),
$mainConfig->get( 'MsgCacheExpiry' ),
$services->getContentLanguage()
);
},
'MimeAnalyzer' => function ( MediaWikiServices $services ) : MimeAnalyzer {
$logger = LoggerFactory::getInstance( 'Mime' );
$mainConfig = $services->getMainConfig();

View file

@ -105,44 +105,14 @@ class MessageCache {
private $loadedLanguages = [];
/**
* Singleton instance
*
* @var MessageCache $instance
*/
private static $instance;
/**
* Get the signleton instance of this class
* Get the singleton instance of this class
*
* @deprecated in 1.34 inject an instance of this class instead of using global state
* @since 1.18
* @return MessageCache
*/
public static function singleton() {
if ( self::$instance === null ) {
global $wgUseDatabaseMessages, $wgMsgCacheExpiry, $wgUseLocalMessageCache;
$services = MediaWikiServices::getInstance();
self::$instance = new self(
$services->getMainWANObjectCache(),
wfGetMessageCacheStorage(),
$wgUseLocalMessageCache
? $services->getLocalServerObjectCache()
: new EmptyBagOStuff(),
$wgUseDatabaseMessages,
$wgMsgCacheExpiry,
$services->getContentLanguage()
);
}
return self::$instance;
}
/**
* Destroy the singleton instance
*
* @since 1.18
*/
public static function destroyInstance() {
self::$instance = null;
return MediaWikiServices::getInstance()->getMessageCache();
}
/**

View file

@ -327,7 +327,7 @@ class ParserTestRunner {
// This is essential and overrides disabling of database messages in TestSetup
$setup['wgUseDatabaseMessages'] = true;
$reset = function () {
MessageCache::destroyInstance();
MediaWikiServices::getInstance()->resetServiceForTesting( 'MessageCache' );
};
$setup[] = $reset;
$teardown[] = $reset;

View file

@ -406,7 +406,6 @@ class MessageTest extends MediaWikiLangTestCase {
$this->setMwGlobals( 'wgRawHtml', true );
// We have to reset the core hook registration.
// to register the html hook
MessageCache::destroyInstance();
$this->overrideMwServices();
$msg = new RawMessage( '<html><script>alert("xss")</script></html>' );

View file

@ -3,7 +3,6 @@
use MediaWiki\Interwiki\InterwikiLookup;
use MediaWiki\Linker\LinkTarget;
use MediaWiki\MediaWikiServices;
use Wikimedia\TestingAccessWrapper;
/**
* @group Database
@ -22,12 +21,6 @@ class TitleTest extends MediaWikiTestCase {
$this->setContentLang( 'en' );
}
protected function tearDown() {
// For testNewMainPage
MessageCache::destroyInstance();
parent::tearDown();
}
/**
* @covers Title::legalChars
*/
@ -1302,10 +1295,11 @@ class TitleTest extends MediaWikiTestCase {
* @covers Title::newMainPage
*/
public function testNewMainPage() {
$msgCache = TestingAccessWrapper::newFromClass( MessageCache::class );
$msgCache->instance = $this->createMock( MessageCache::class );
$msgCache->instance->method( 'get' )->willReturn( 'Foresheet' );
$msgCache->instance->method( 'transform' )->willReturn( 'Foresheet' );
$mock = $this->createMock( MessageCache::class );
$mock->method( 'get' )->willReturn( 'Foresheet' );
$mock->method( 'transform' )->willReturn( 'Foresheet' );
$this->setService( 'MessageCache', $mock );
$this->assertSame(
'Foresheet',

View file

@ -13,7 +13,6 @@ class MessageCacheTest extends MediaWikiLangTestCase {
protected function setUp() {
parent::setUp();
$this->configureLanguages();
MessageCache::destroyInstance();
MessageCache::singleton()->enable();
}
@ -25,6 +24,7 @@ class MessageCacheTest extends MediaWikiLangTestCase {
// let's choose e.g. German (de)
$this->setUserLang( 'de' );
$this->setContentLang( 'de' );
$this->resetServices();
}
function addDBDataOnce() {
@ -152,7 +152,6 @@ class MessageCacheTest extends MediaWikiLangTestCase {
] );
$this->overrideMwServices();
MessageCache::destroyInstance();
$messageCache = MessageCache::singleton();
$messageCache->enable();
@ -260,7 +259,6 @@ class MessageCacheTest extends MediaWikiLangTestCase {
$importer->import( $importRevision );
// Now, load the message from the wiki page
MessageCache::destroyInstance();
$messageCache = MessageCache::singleton();
$messageCache->enable();
$messageCache = TestingAccessWrapper::newFromObject( $messageCache );