Remove deprecated Language::$mLangObjCache

Removing this deprecated cache allows LanguageFactory
to start using MapCacheLRU instead of implementing
LRU semantics manually.

Change-Id: I8093067fb6f51110351b8592fcbcfa7559d942ee
This commit is contained in:
Petr Pchelko 2021-07-16 10:38:02 -07:00
parent 1c798839fd
commit 0484ac9e7a
5 changed files with 13 additions and 36 deletions

View file

@ -356,6 +356,7 @@ because of Phabricator reports.
* Content::getSecondaryDataUpdates(), was removed. Use
ContentHandler::getSecondaryDataUpdates() instead.
* wfDiff(), deprecated since 1.25, has been removed.
* Language::$mLangObjCache, deprecated since 1.35, was removed.
* …
=== Deprecations in 1.37 ===

View file

@ -487,9 +487,6 @@ abstract class Installer {
// Disable i18n cache
$mwServices->getLocalisationCache()->disableBackend();
// Clear language cache so the old i18n cache doesn't sneak back in
Language::$mLangObjCache = [];
// Set a fake user.
// Note that this will reset the context's language,
// so set the user before setting the language.

View file

@ -27,9 +27,9 @@ namespace MediaWiki\Languages;
use Language;
use LanguageConverter;
use LocalisationCache;
use MapCacheLRU;
use MediaWiki\Config\ServiceOptions;
use MediaWiki\HookContainer\HookContainer;
use MediaWiki\MediaWikiServices;
use MWException;
/**
@ -58,8 +58,8 @@ class LanguageFactory {
/** @var HookContainer */
private $hookContainer;
/** @var array */
private $langObjCache = [];
/** @var MapCacheLRU|null */
private $langObjCache = null;
/** @var array */
private $parentLangCache = [];
@ -96,6 +96,9 @@ class LanguageFactory {
$this->langFallback = $langFallback;
$this->langConverterFactory = $langConverterFactory;
$this->hookContainer = $hookContainer;
if ( $options->get( 'LangObjCacheSize' ) ) {
$this->langObjCache = new MapCacheLRU( $options->get( 'LangObjCacheSize' ) );
}
}
/**
@ -108,32 +111,16 @@ class LanguageFactory {
public function getLanguage( $code ): Language {
$code = $this->options->get( 'DummyLanguageCodes' )[$code] ?? $code;
// This is horrible, horrible code, but is necessary to support Language::$mLangObjCache
// per the deprecation policy. Kill with fire in 1.36!
if (
MediaWikiServices::hasInstance() &&
$this === MediaWikiServices::getInstance()->getLanguageFactory()
) {
$this->langObjCache = Language::$mLangObjCache;
if ( !$this->langObjCache ) {
return $this->newFromCode( $code );
}
// Get the language object to process
$langObj = $this->langObjCache[$code] ?? $this->newFromCode( $code );
// Merge the language object in to get it up front in the cache
$this->langObjCache = array_merge( [ $code => $langObj ], $this->langObjCache );
// Get rid of the oldest ones in case we have an overflow
$this->langObjCache =
array_slice( $this->langObjCache, 0, $this->options->get( 'LangObjCacheSize' ), true );
// As above, remove this in 1.36
if (
MediaWikiServices::hasInstance() &&
$this === MediaWikiServices::getInstance()->getLanguageFactory()
) {
Language::$mLangObjCache = $this->langObjCache;
if ( $this->langObjCache->has( $code ) ) {
return $this->langObjCache->get( $code );
}
$langObj = $this->newFromCode( $code );
$this->langObjCache->set( $code, $langObj );
return $langObj;
}

View file

@ -121,12 +121,6 @@ class Language {
*/
private $hookRunner;
/**
* @deprecated since 1.35, use LanguageFactory
* @var array
*/
public static $mLangObjCache = [];
/**
* Return a fallback chain for messages in getFallbacksFor
* @since 1.32

View file

@ -927,7 +927,6 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
}
self::resetLegacyGlobals();
Language::$mLangObjCache = [];
}
/**
@ -981,7 +980,6 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
}
self::resetLegacyGlobals();
Language::$mLangObjCache = [];
return $newInstance;
}