Convert MessageCache to service
authorAryeh Gregor <ayg@aryeh.name>
Mon, 8 Apr 2019 15:21:49 +0000 (18:21 +0300)
committerAryeh Gregor <ayg@aryeh.name>
Sun, 18 Aug 2019 09:11:36 +0000 (12:11 +0300)
Depends-On: Ia70e6c75f6e8a533f20cd44ebb05e013678e9951
Depends-On: I546eda0377f3a50843144b1450d3fbe8e4e02a8a
Change-Id: I305539a8598535a73e5cd280b2becdafa740ef97

RELEASE-NOTES-1.34
includes/MediaWikiServices.php
includes/ServiceWiring.php
includes/cache/MessageCache.php
tests/parser/ParserTestRunner.php
tests/phpunit/includes/MessageTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/cache/MessageCacheTest.php

index 0c6fec2..fd7e4d9 100644 (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 ===
 * …
index 7fda452..e5efd7d 100644 (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
index c192b5a..7221381 100644 (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();
index 5745451..93fdb16 100644 (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();
        }
 
        /**
index 2945308..36c3fe2 100644 (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;
index e745960..fb32ef7 100644 (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>' );
index e8f0873..d3a192c 100644 (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',
index 35dacac..74ad84a 100644 (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 );