wiki.techinc.nl/includes/parser/ParserFactory.php
C. Scott Ananian 0eaaceea3e Hard-deprecate direct calls to Parser::__construct()
These were deprecated in 1.34, but let's put in some hard deprecation
warnings for 1.35 since this class is certainly going to be refactored
in the future to allow both the legacy parser and Parsoid to extend
Parser as a base class.  Access via the ParserFactory will be fine,
but cut down on the number of different ways Parsers can be constructed
and initialized.

Code search:
https://codesearch.wmflabs.org/deployed/?q=new%20Parser%5C%28&i=nope&files=&repos=
https://codesearch.wmflabs.org/deployed/?q=getMockBuilder%5C%28%20Parser%3A%3A&i=nope&files=&repos=
https://codesearch.wmflabs.org/deployed/?q=new%20Parser%3B&i=nope&files=&repos=

Bug: T236811
Depends-On: Ib3be450c55e1793b027d9b4dae692ba5891b0328
Depends-On: I9d16513f8bd449a43b0a0afbd73651a5c0afa588
Depends-On: I74efda708470efeb82f8f80346ec1ee7e9fd8f2b
Depends-On: I777475d0ab0144e53240173f501d6c8da35d33fb
Change-Id: If36283ec0b78b188b61f658639105d1ed7653e0a
2020-04-16 16:34:34 -04:00

140 lines
3.7 KiB
PHP

<?php
/**
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
* @ingroup Parser
*/
use MediaWiki\BadFileLookup;
use MediaWiki\Config\ServiceOptions;
use MediaWiki\Languages\LanguageConverterFactory;
use MediaWiki\Linker\LinkRendererFactory;
use MediaWiki\SpecialPage\SpecialPageFactory;
use Psr\Log\LoggerInterface;
/**
* @since 1.32
*/
class ParserFactory {
/** @var ServiceOptions */
private $svcOptions;
/** @var MagicWordFactory */
private $magicWordFactory;
/** @var Language */
private $contLang;
/** @var string */
private $urlProtocols;
/** @var SpecialPageFactory */
private $specialPageFactory;
/** @var LinkRendererFactory */
private $linkRendererFactory;
/** @var NamespaceInfo */
private $nsInfo;
/** @var LoggerInterface */
private $logger;
/** @var BadFileLookup */
private $badFileLookup;
/** @var LanguageConverterFactory */
private $languageConverterFactory;
/**
* Track calls to Parser constructor to aid in deprecation of direct
* Parser invocation. This is temporary: it will be removed once the
* deprecation notice period is over and the underlying method calls
* are refactored.
* @internal
* @var int
*/
public static $inParserFactory = 0;
/**
* @param ServiceOptions $svcOptions
* @param MagicWordFactory $magicWordFactory
* @param Language $contLang Content language
* @param string $urlProtocols As returned from wfUrlProtocols()
* @param SpecialPageFactory $spFactory
* @param LinkRendererFactory $linkRendererFactory
* @param NamespaceInfo $nsInfo
* @param LoggerInterface $logger
* @param BadFileLookup $badFileLookup
* @param LanguageConverterFactory $languageConverterFactory
* @since 1.32
*/
public function __construct(
ServiceOptions $svcOptions,
MagicWordFactory $magicWordFactory,
Language $contLang,
string $urlProtocols,
SpecialPageFactory $spFactory,
LinkRendererFactory $linkRendererFactory,
NamespaceInfo $nsInfo,
LoggerInterface $logger,
BadFileLookup $badFileLookup,
LanguageConverterFactory $languageConverterFactory
) {
$svcOptions->assertRequiredOptions( Parser::CONSTRUCTOR_OPTIONS );
wfDebug( __CLASS__ . ": using default preprocessor\n" );
$this->svcOptions = $svcOptions;
$this->magicWordFactory = $magicWordFactory;
$this->contLang = $contLang;
$this->urlProtocols = $urlProtocols;
$this->specialPageFactory = $spFactory;
$this->linkRendererFactory = $linkRendererFactory;
$this->nsInfo = $nsInfo;
$this->logger = $logger;
$this->badFileLookup = $badFileLookup;
$this->languageConverterFactory = $languageConverterFactory;
}
/**
* Creates a new parser
*
* @return Parser
* @since 1.32
*/
public function create() : Parser {
self::$inParserFactory++;
try {
return new Parser(
$this->svcOptions,
$this->magicWordFactory,
$this->contLang,
$this,
$this->urlProtocols,
$this->specialPageFactory,
$this->linkRendererFactory,
$this->nsInfo,
$this->logger,
$this->badFileLookup,
$this->languageConverterFactory
);
} finally {
self::$inParserFactory--;
}
}
}