PHP 7.0 makes many error conditions throw instances of the new Error class which does not extend the known Exception. The Throwable interface provides a concise and type-safe way of handling either, e.g. for logging purposes, but HHVM did not support it, requiring tedious fallback checks. This commit replaces occurrences of Exception in code paths equally covered by Throwable, like Exception|Throwable parameter and return types (also nullable), instanceof guards, duplicated `catch` blocks, as well as related comments and documentation blocks, with the exception of $previous parameter descriptions consistent with the manual at https://www.php.net/manual/en/exception.construct.php Proper type declarations have been added or reinstated where possible. Change-Id: I5d3920d3cc66936a350314e2f19c4f6faeffd7c0
53 lines
1.9 KiB
PHP
53 lines
1.9 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
|
|
*/
|
|
|
|
/**
|
|
* Basic localized exception.
|
|
*
|
|
* @since 1.29
|
|
* @ingroup Exception
|
|
* @note Don't use this in a situation where MessageCache is not functional.
|
|
*/
|
|
class LocalizedException extends Exception implements ILocalizedException {
|
|
/** @var string|array|MessageSpecifier */
|
|
protected $messageSpec;
|
|
|
|
/**
|
|
* @param string|array|MessageSpecifier $messageSpec See Message::newFromSpecifier
|
|
* @param int $code
|
|
* @param Throwable|null $previous The previous exception used for the exception
|
|
* chaining.
|
|
*/
|
|
public function __construct( $messageSpec, $code = 0, Throwable $previous = null ) {
|
|
$this->messageSpec = $messageSpec;
|
|
|
|
// Exception->getMessage() should be in plain English, not localized.
|
|
// So fetch the English version of the message, without local
|
|
// customizations, and make a basic attempt to turn markup into text.
|
|
$msg = $this->getMessageObject()->inLanguage( 'en' )->useDatabase( false )->text();
|
|
$msg = preg_replace( '!</?(var|kbd|samp|code)>!', '"', $msg );
|
|
$msg = Sanitizer::stripAllTags( $msg );
|
|
parent::__construct( $msg, $code, $previous );
|
|
}
|
|
|
|
public function getMessageObject() {
|
|
return Message::newFromSpecifier( $this->messageSpec );
|
|
}
|
|
}
|