From 752e7dd707a933ec92907dc881531c2b8b9c2a06 Mon Sep 17 00:00:00 2001 From: Aryeh Gregor Date: Mon, 8 Apr 2019 18:21:49 +0300 Subject: [PATCH] Convert MessageCache to service Depends-On: Ia70e6c75f6e8a533f20cd44ebb05e013678e9951 Depends-On: I546eda0377f3a50843144b1450d3fbe8e4e02a8a Change-Id: I305539a8598535a73e5cd280b2becdafa740ef97 --- RELEASE-NOTES-1.34 | 5 ++- includes/MediaWikiServices.php | 9 +++++ includes/ServiceWiring.php | 14 ++++++++ includes/cache/MessageCache.php | 36 ++----------------- tests/parser/ParserTestRunner.php | 2 +- tests/phpunit/includes/MessageTest.php | 1 - tests/phpunit/includes/TitleTest.php | 16 +++------ .../includes/cache/MessageCacheTest.php | 4 +-- 8 files changed, 37 insertions(+), 50 deletions(-) diff --git a/RELEASE-NOTES-1.34 b/RELEASE-NOTES-1.34 index 0c6fec26fe..fd7e4d9f57 100644 --- a/RELEASE-NOTES-1.34 +++ b/RELEASE-NOTES-1.34 @@ -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 === * … diff --git a/includes/MediaWikiServices.php b/includes/MediaWikiServices.php index 7fda45280a..e5efd7d99c 100644 --- a/includes/MediaWikiServices.php +++ b/includes/MediaWikiServices.php @@ -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 diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index c192b5a266..7221381e90 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -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(); diff --git a/includes/cache/MessageCache.php b/includes/cache/MessageCache.php index 57454516f3..93fdb162e2 100644 --- a/includes/cache/MessageCache.php +++ b/includes/cache/MessageCache.php @@ -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(); } /** diff --git a/tests/parser/ParserTestRunner.php b/tests/parser/ParserTestRunner.php index 29453082ef..36c3fe20b0 100644 --- a/tests/parser/ParserTestRunner.php +++ b/tests/parser/ParserTestRunner.php @@ -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; diff --git a/tests/phpunit/includes/MessageTest.php b/tests/phpunit/includes/MessageTest.php index e745960a45..fb32ef7fda 100644 --- a/tests/phpunit/includes/MessageTest.php +++ b/tests/phpunit/includes/MessageTest.php @@ -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( '' ); diff --git a/tests/phpunit/includes/TitleTest.php b/tests/phpunit/includes/TitleTest.php index e8f08732e8..d3a192c6e1 100644 --- a/tests/phpunit/includes/TitleTest.php +++ b/tests/phpunit/includes/TitleTest.php @@ -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', diff --git a/tests/phpunit/includes/cache/MessageCacheTest.php b/tests/phpunit/includes/cache/MessageCacheTest.php index 35dacac598..74ad84ade6 100644 --- a/tests/phpunit/includes/cache/MessageCacheTest.php +++ b/tests/phpunit/includes/cache/MessageCacheTest.php @@ -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 ); -- 2.20.1