* @file
* @ingroup Parser
*/
+
+use MediaWiki\MediaWikiServices;
use Wikimedia\ScopedCallback;
/**
* @warning For interaction with the parser cache, use
* WikiPage::makeParserOptions(), ContentHandler::makeParserOptions(), or
* ParserOptions::newCanonical() instead.
- * @param User $user
- * @param Language $lang
+ * @param User|null $user
+ * @param Language|null $lang
*/
public function __construct( $user = null, $lang = null ) {
if ( $user === null ) {
*
* @since 1.17
* @param string[] $forOptions
- * @param Title $title Used to get the content language of the page (since r97636)
+ * @param Title|null $title Used to get the content language of the page (since r97636)
* @return string Page rendering hash
*/
public function optionsHash( $forOptions, $title = null ) {
global $wgRenderHashAppend;
+ $inCacheKey = self::allCacheVaryingOptions();
+
+ // Resolve any lazy options
+ foreach ( array_intersect( $forOptions, $inCacheKey, array_keys( self::$lazyOptions ) ) as $k ) {
+ if ( $this->options[$k] === null ) {
+ $this->options[$k] = call_user_func( self::$lazyOptions[$k], $this, $k );
+ }
+ }
+
$options = $this->options;
$defaults = self::getCanonicalOverrides() + self::getDefaults();
- $inCacheKey = self::$inCacheKey;
// We only include used options with non-canonical values in the key
// so adding a new option doesn't invalidate the entire parser cache.
// requires manual invalidation of existing cache entries, as mentioned
// in the docs on the relevant methods and hooks.
$values = [];
- foreach ( $inCacheKey as $option => $include ) {
- if ( $include && in_array( $option, $forOptions, true ) ) {
- $v = $this->optionToString( $options[$option] );
- $d = $this->optionToString( $defaults[$option] );
- if ( $v !== $d ) {
- $values[] = "$option=$v";
- }
+ foreach ( array_intersect( $inCacheKey, $forOptions ) as $option ) {
+ $v = $this->optionToString( $options[$option] );
+ $d = $this->optionToString( $defaults[$option] );
+ if ( $v !== $d ) {
+ $values[] = "$option=$v";
}
}
};
end( $wgHooks['TitleExists'] );
$key = key( $wgHooks['TitleExists'] );
- LinkCache::singleton()->clearBadLink( $title->getPrefixedDBkey() );
- return new ScopedCallback( function () use ( $title, $key ) {
+ $linkCache = MediaWikiServices::getInstance()->getLinkCache();
+ $linkCache->clearBadLink( $title->getPrefixedDBkey() );
+ return new ScopedCallback( function () use ( $title, $key, $linkCache ) {
global $wgHooks;
unset( $wgHooks['TitleExists'][$key] );
- LinkCache::singleton()->clearLink( $title );
+ $linkCache->clearLink( $title );
} );
}
}