From 53fe91ded58c3be587a025984c7051c01be2fedc Mon Sep 17 00:00:00 2001 From: "C. Scott Ananian" Date: Tue, 9 Apr 2019 14:42:42 -0400 Subject: [PATCH] Hard deprecate Preprocessor_DOM The Preprocessor_DOM implementation doesn't interact well with PHP memory profiling, and has some limitations not present in the Preprocessor_Hash implementation (see T216664). There is no reason to keep around two versions of the preprocessor: it just complicates on-going wikitext feature development. Hard deprecate use of Preprocessor_DOM, so we can remove the redundant code in a future release. Bug: T204945 Depends-On: Id38c9360e4d02b570996dbf7a660f964f02f1a2c Change-Id: Ica5d1ad5b1e677542962fc36d582a793f941155e --- RELEASE-NOTES-1.34 | 3 +++ includes/DefaultSettings.php | 3 +++ includes/parser/PPCustomFrame_DOM.php | 1 + includes/parser/PPFrame_DOM.php | 1 + includes/parser/PPNode_DOM.php | 1 + includes/parser/PPTemplateFrame_DOM.php | 1 + includes/parser/Parser.php | 13 +------------ includes/parser/Preprocessor_DOM.php | 2 ++ tests/parser/ParserTestRunner.php | 7 +++++++ tests/phpunit/includes/parser/PreprocessorTest.php | 3 +++ 10 files changed, 23 insertions(+), 12 deletions(-) diff --git a/RELEASE-NOTES-1.34 b/RELEASE-NOTES-1.34 index cc1015c824..5917e3ce53 100644 --- a/RELEASE-NOTES-1.34 +++ b/RELEASE-NOTES-1.34 @@ -265,6 +265,9 @@ because of Phabricator reports. * ResourceLoaderContext::getConfig and ResourceLoaderContext::getLogger have been deprecated. Inside ResourceLoaderModule subclasses, use the local methods instead. Elsewhere, use the methods from the ResourceLoader class. +* The Preprocessor_DOM implementation has been deprecated. It will be + removed in a future release. Use the Preprocessor_Hash implementation + instead. === Other changes in 1.34 === * … diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 1be573d030..7d6318d206 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -4153,6 +4153,9 @@ $wgInvalidRedirectTargets = [ 'Filepath', 'Mypage', 'Mytalk', 'Redirect' ]; * If this parameter is not given, it uses Preprocessor_DOM if the * DOM module is available, otherwise it uses Preprocessor_Hash. * + * The Preprocessor_DOM class is deprecated, and will be removed in a future + * release. + * * The entire associative array will be passed through to the constructor as * the first parameter. Note that only Setup.php can use this variable -- * the configuration will change at runtime via Parser member functions, so diff --git a/includes/parser/PPCustomFrame_DOM.php b/includes/parser/PPCustomFrame_DOM.php index 70663a0dea..d274558afc 100644 --- a/includes/parser/PPCustomFrame_DOM.php +++ b/includes/parser/PPCustomFrame_DOM.php @@ -21,6 +21,7 @@ /** * Expansion frame with custom arguments + * @deprecated since 1.34, use PPCustomFrame_Hash * @ingroup Parser */ // phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps diff --git a/includes/parser/PPFrame_DOM.php b/includes/parser/PPFrame_DOM.php index a7fea0028a..03ee6d9639 100644 --- a/includes/parser/PPFrame_DOM.php +++ b/includes/parser/PPFrame_DOM.php @@ -21,6 +21,7 @@ /** * An expansion frame, used as a context to expand the result of preprocessToObj() + * @deprecated since 1.34, use PPFrame_Hash * @ingroup Parser */ // phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps diff --git a/includes/parser/PPNode_DOM.php b/includes/parser/PPNode_DOM.php index 8a435bab67..26a47911f3 100644 --- a/includes/parser/PPNode_DOM.php +++ b/includes/parser/PPNode_DOM.php @@ -20,6 +20,7 @@ */ /** + * @deprecated since 1.34, use PPNode_Hash_{Tree,Text,Array,Attr} * @ingroup Parser */ // phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps diff --git a/includes/parser/PPTemplateFrame_DOM.php b/includes/parser/PPTemplateFrame_DOM.php index 52cb9cb0f0..b4c874371d 100644 --- a/includes/parser/PPTemplateFrame_DOM.php +++ b/includes/parser/PPTemplateFrame_DOM.php @@ -21,6 +21,7 @@ /** * Expansion frame with template arguments + * @deprecated since 1.34, use PPTemplateFrame_Hash * @ingroup Parser */ // phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php index 486fdf4413..c61de38a86 100644 --- a/includes/parser/Parser.php +++ b/includes/parser/Parser.php @@ -421,21 +421,10 @@ class Parser { * Which class should we use for the preprocessor if not otherwise specified? * * @since 1.34 + * @deprecated since 1.34, removing configurability of preprocessor * @return string */ public static function getDefaultPreprocessorClass() { - if ( wfIsHHVM() ) { - # Under HHVM Preprocessor_Hash is much faster than Preprocessor_DOM - return Preprocessor_Hash::class; - } - if ( extension_loaded( 'domxml' ) ) { - # PECL extension that conflicts with the core DOM extension (T15770) - wfDebug( "Warning: you have the obsolete domxml extension for PHP. Please remove it!\n" ); - return Preprocessor_Hash::class; - } - if ( extension_loaded( 'dom' ) ) { - return Preprocessor_DOM::class; - } return Preprocessor_Hash::class; } diff --git a/includes/parser/Preprocessor_DOM.php b/includes/parser/Preprocessor_DOM.php index 0f0496beac..9e510d21d6 100644 --- a/includes/parser/Preprocessor_DOM.php +++ b/includes/parser/Preprocessor_DOM.php @@ -19,6 +19,7 @@ * * @file * @ingroup Parser + * @deprecated since 1.34, use Preprocessor_Hash */ /** @@ -37,6 +38,7 @@ class Preprocessor_DOM extends Preprocessor { const CACHE_PREFIX = 'preprocess-xml'; public function __construct( $parser ) { + wfDeprecated( __METHOD__, '1.34' ); // T204945 $this->parser = $parser; $mem = ini_get( 'memory_limit' ); $this->memoryLimit = false; diff --git a/tests/parser/ParserTestRunner.php b/tests/parser/ParserTestRunner.php index 3b63c19a94..7d46e834c1 100644 --- a/tests/parser/ParserTestRunner.php +++ b/tests/parser/ParserTestRunner.php @@ -797,6 +797,13 @@ class ParserTestRunner { $class = $wgParserConf['class']; $parser = new $class( [ 'preprocessorClass' => $preprocessor ] + $wgParserConf ); + if ( $preprocessor ) { + # Suppress deprecation warning for Preprocessor_DOM while testing + Wikimedia\suppressWarnings(); + wfDeprecated( 'Preprocessor_DOM::__construct' ); + Wikimedia\restoreWarnings(); + $parser->getPreprocessor(); + } ParserTestParserHook::setup( $parser ); return $parser; diff --git a/tests/phpunit/includes/parser/PreprocessorTest.php b/tests/phpunit/includes/parser/PreprocessorTest.php index 6b3e05da51..3b2b1050bd 100644 --- a/tests/phpunit/includes/parser/PreprocessorTest.php +++ b/tests/phpunit/includes/parser/PreprocessorTest.php @@ -48,6 +48,9 @@ class PreprocessorTest extends MediaWikiTestCase { $this->mOptions = ParserOptions::newFromUserAndLang( new User, MediaWikiServices::getInstance()->getContentLanguage() ); + # Suppress deprecation warning for Preprocessor_DOM while testing + $this->hideDeprecated( 'Preprocessor_DOM::__construct' ); + $this->mPreprocessors = []; foreach ( self::$classNames as $className ) { $this->mPreprocessors[$className] = new $className( $this ); -- 2.20.1