From a877ac966bb3a77631fe9208b750cd9d636640cb Mon Sep 17 00:00:00 2001 From: mikolajmeller Date: Fri, 14 Mar 2025 09:41:46 +0100 Subject: [PATCH 1/2] fix(PLATFORM-10832): remove dead code to fix reflection exception --- src/UsingDataHooks.php | 33 --------------------------------- 1 file changed, 33 deletions(-) diff --git a/src/UsingDataHooks.php b/src/UsingDataHooks.php index f9c0690..9d07b82 100644 --- a/src/UsingDataHooks.php +++ b/src/UsingDataHooks.php @@ -6,7 +6,6 @@ use MediaWiki\Hook\GetMagicVariableIDsHook; use MediaWiki\Hook\ParserFirstCallInitHook; use MediaWiki\Hook\ParserGetVariableValueSwitchHook; -use MediaWiki\HookContainer\HookRunner; use MediaWiki\Linker\LinkTarget; use MediaWiki\Parser\Parser; use MediaWiki\Parser\PPFrame; @@ -15,7 +14,6 @@ use MediaWiki\Title\NamespaceInfo; use MediaWiki\Title\Title; use MediaWiki\Title\TitleFactory; -use ReflectionProperty; /** * Registers and defines parser functions for UsingData. @@ -117,48 +115,17 @@ private function getDataFrame( if ( ( $sourcePage != '' && $sourcePage != $parsingTitle?->getPrefixedText() ) || $parser->getOptions()->getIsSectionPreview() ) { - $text = null; if ( $title ) { [ $text, $title ] = $parser->fetchTemplateAndTitle( $title ); } if ( $title && $title->getPrefixedText() != $sourcePage ) { $this->dataFrames[$title->getPrefixedText()] = $this->dataFrames[$sourcePage]; } - if ( $text !== null ) { - $this->makeDataParserAndRun( $parser, - static function ( Parser $dataParser ) use ( $text, $title, $parser ) { - $dataParser->preprocess( $text, $title, clone $parser->getOptions() ); - $parser->mPPNodeCount += $dataParser->mPPNodeCount; - } - ); - } } } return $this->dataFrames[$sourcePage]; } - private function makeDataParserAndRun( Parser $parser, callable $callback ): void { - $hookRunnerProperty = new ReflectionProperty( $parser, 'hookRunner' ); - $originalHookRunner = $hookRunnerProperty->getValue( $parser ); - - $hookContainerProperty = new ReflectionProperty( $originalHookRunner, 'container' ); - $hookContainer = $hookContainerProperty->getValue( $originalHookRunner ); - - $newHookRunner = new class ( $hookContainer ) extends HookRunner { - public function onParserClearState( $parser ): bool { - return true; - } - }; - - try { - $dataParser = clone $parser; - $hookRunnerProperty->setValue( $dataParser, $newHookRunner ); - $callback( $dataParser ); - } finally { - $this->isInDataSearchMode = false; - } - } - /** * {{#using:Page#Hash|Template|Default|...}} parses Template using #data from Page's Hash fragment; or Default * if no data from Page can be found. Named arguments override those in the #data tag. From d85e9579867f07676a30b79719183ef1c7085cc3 Mon Sep 17 00:00:00 2001 From: mikolajmeller Date: Fri, 14 Mar 2025 15:13:36 +0100 Subject: [PATCH 2/2] fix(PLATFORM-10832): remove dead code --- extension.json | 1 - src/UsingDataHooks.php | 34 ++-------------------------------- 2 files changed, 2 insertions(+), 33 deletions(-) diff --git a/extension.json b/extension.json index 37c5b2e..2416e49 100644 --- a/extension.json +++ b/extension.json @@ -20,7 +20,6 @@ "Fandom\\UsingData\\": "src" }, "Hooks": { - "BeforeParserFetchTemplateRevisionRecord": "main", "GetMagicVariableIDs": "main", "ParserFirstCallInit": "main", "ParserGetVariableValueSwitch": "main" diff --git a/src/UsingDataHooks.php b/src/UsingDataHooks.php index 9d07b82..915b680 100644 --- a/src/UsingDataHooks.php +++ b/src/UsingDataHooks.php @@ -2,15 +2,12 @@ namespace Fandom\UsingData; -use MediaWiki\Hook\BeforeParserFetchTemplateRevisionRecordHook; use MediaWiki\Hook\GetMagicVariableIDsHook; use MediaWiki\Hook\ParserFirstCallInitHook; use MediaWiki\Hook\ParserGetVariableValueSwitchHook; -use MediaWiki\Linker\LinkTarget; use MediaWiki\Parser\Parser; use MediaWiki\Parser\PPFrame; use MediaWiki\Parser\PPNode; -use MediaWiki\Revision\RevisionRecord; use MediaWiki\Title\NamespaceInfo; use MediaWiki\Title\Title; use MediaWiki\Title\TitleFactory; @@ -21,15 +18,11 @@ class UsingDataHooks implements ParserFirstCallInitHook, GetMagicVariableIDsHook, - ParserGetVariableValueSwitchHook, - BeforeParserFetchTemplateRevisionRecordHook + ParserGetVariableValueSwitchHook { /** @var UsingDataPPFrameDOM[] Data frames for each page */ private array $dataFrames = []; - /** @var bool Whether we are currently searching for data */ - private bool $isInDataSearchMode = false; - public function __construct( private readonly TitleFactory $titleFactory, private readonly NamespaceInfo $namespaceInfo, @@ -67,18 +60,6 @@ public function onParserGetVariableValueSwitch( } } - public function onBeforeParserFetchTemplateRevisionRecord( - ?LinkTarget $contextTitle, LinkTarget $title, - bool &$skip, ?RevisionRecord &$revRecord - ): bool { - if ( $this->isInDataSearchMode ) { - $skip = true; - return false; - } - - return true; - } - /** * Handles {{ANCESTORNAME:depth}} */ @@ -170,10 +151,6 @@ public function renderFunctionUsingArg( Parser $parser, PPFrame $frame, array $a * Parses common elements of #using syntax. */ private function parseUsingCommons( Parser $parser, PPFrame $frame, array $args ): ?array { - if ( $this->isInDataSearchMode ) { - return null; - } - $source = trim( $frame->expand( $args[0] ) ); if ( str_contains( $source, '%' ) ) { $source = str_replace( [ '<', '>' ], [ '<', '>' ], urldecode( $source ) ); @@ -213,10 +190,6 @@ private function parseUsingCommons( Parser $parser, PPFrame $frame, array $args public function renderTagUsing( string $text, array $args, Parser $parser, PPFrame $frame ): array { - if ( $this->isInDataSearchMode ) { - return [ '', 'markerType' => 'none' ]; - } - $source = isset( $args['page'] ) ? $parser->replaceVariables( $args['page'], $frame ) : ''; unset( $args['page'] ); if ( str_contains( $source, '%' ) ) { @@ -267,12 +240,9 @@ public function renderFunctionData( Parser $parser, PPFrame $frame, array $args $fragment = substr( $templateName, 1 ); } - if ( $frame->depth == 0 || $this->isInDataSearchMode ) { + if ( $frame->depth == 0 ) { $this->dataFrames[$hostPage] ??= new UsingDataPPFrameDOM( $frame, $hostPage ); $this->dataFrames[$hostPage]->addArgs( $frame, $args, $fragment ); - if ( $this->isInDataSearchMode ) { - return ''; - } } if ( !is_object( $templateTitle ) ) { return '';