diff options
-rw-r--r-- | RELEASE-NOTES-1.43 | 5 | ||||
-rw-r--r-- | includes/Message/Message.php | 8 | ||||
-rw-r--r-- | includes/Message/UserGroupMembershipParam.php | 2 | ||||
-rw-r--r-- | includes/libs/Message/MessageValue.php | 2 | ||||
-rw-r--r-- | includes/libs/Message/ParamType.php | 1 | ||||
-rw-r--r-- | includes/libs/Message/ScalarParam.php | 8 | ||||
-rw-r--r-- | tests/phpunit/includes/Message/TextFormatterTest.php | 3 | ||||
-rw-r--r-- | tests/phpunit/includes/language/MessageTest.php | 2 | ||||
-rw-r--r-- | tests/phpunit/unit/includes/Message/UserGroupMembershipParamTest.php | 8 | ||||
-rw-r--r-- | tests/phpunit/unit/includes/libs/Message/MessageValueTest.php | 2 |
10 files changed, 32 insertions, 9 deletions
diff --git a/RELEASE-NOTES-1.43 b/RELEASE-NOTES-1.43 index 3f00e3db547b..e807deedb57e 100644 --- a/RELEASE-NOTES-1.43 +++ b/RELEASE-NOTES-1.43 @@ -365,6 +365,11 @@ because of Phabricator reports. DatabaseBlockStore. * DatabaseBlockStore::getReadStage() and ::getWriteStage() are deprecated. Use the new schema unconditionally. +* To support a future change allowing serializing of MessageValue objects + as JSON, the methods MessageValue::objectParams(), Message::objectParams() + and Message::objectParam() are deprecated. The UserGroupMembershipParam + class, the ParamType::OBJECT constant, and passing Stringable objects to + ScalarParam are likewise deprecated. * … === Other changes in 1.43 === diff --git a/includes/Message/Message.php b/includes/Message/Message.php index 297ddfd4d9ed..0c96968dae58 100644 --- a/includes/Message/Message.php +++ b/includes/Message/Message.php @@ -718,6 +718,7 @@ class Message implements MessageSpecifier, Serializable { * Add parameters that represent stringable objects * * @since 1.38 + * @deprecated since 1.43 * * @param Stringable|Stringable[] ...$params stringable parameters, * or a single argument that is an array of stringable parameters. @@ -725,11 +726,14 @@ class Message implements MessageSpecifier, Serializable { * @return self $this */ public function objectParams( ...$params ) { + wfDeprecated( __METHOD__, '1.43' ); if ( isset( $params[0] ) && is_array( $params[0] ) ) { $params = $params[0]; } foreach ( $params as $param ) { - $this->parameters[] = self::objectParam( $param ); + // Suppress redundant deprecation warning + // phpcs:ignore Generic.PHP.NoSilencedErrors + $this->parameters[] = @self::objectParam( $param ); } return $this; } @@ -1285,12 +1289,14 @@ class Message implements MessageSpecifier, Serializable { /** * @since 1.38 + * @deprecated since 1.43 * * @param Stringable $object * * @return Stringable[] Array with a single "object" key. */ public static function objectParam( Stringable $object ) { + wfDeprecated( __METHOD__, '1.43' ); return [ 'object' => $object ]; } diff --git a/includes/Message/UserGroupMembershipParam.php b/includes/Message/UserGroupMembershipParam.php index d9f5551cc043..3f9107072dfd 100644 --- a/includes/Message/UserGroupMembershipParam.php +++ b/includes/Message/UserGroupMembershipParam.php @@ -28,6 +28,7 @@ use Stringable; /** * @since 1.38 + * @deprecated since 1.43 Use Language::getGroupMemberName() instead */ class UserGroupMembershipParam implements Stringable { /** @var string */ @@ -37,6 +38,7 @@ class UserGroupMembershipParam implements Stringable { private $member; public function __construct( string $group, UserIdentity $member ) { + wfDeprecated( __CLASS__, '1.43' ); $this->group = $group; $this->member = $member; } diff --git a/includes/libs/Message/MessageValue.php b/includes/libs/Message/MessageValue.php index 3af73e460223..39b8365b0b11 100644 --- a/includes/libs/Message/MessageValue.php +++ b/includes/libs/Message/MessageValue.php @@ -97,10 +97,12 @@ class MessageValue { /** * Chainable mutator which adds object parameters * + * @deprecated since 1.43 * @param Stringable ...$values stringable object values * @return $this */ public function objectParams( ...$values ) { + wfDeprecated( __METHOD__, '1.43' ); foreach ( $values as $value ) { $this->params[] = new ScalarParam( ParamType::OBJECT, $value ); } diff --git a/includes/libs/Message/ParamType.php b/includes/libs/Message/ParamType.php index 100adb70d9f8..1d17ea0cf660 100644 --- a/includes/libs/Message/ParamType.php +++ b/includes/libs/Message/ParamType.php @@ -68,6 +68,7 @@ class ParamType { /** * For arbitrary stringable objects * @since 1.38 + * @deprecated since 1.43 */ public const OBJECT = 'object'; diff --git a/includes/libs/Message/ScalarParam.php b/includes/libs/Message/ScalarParam.php index ca976f4f67b0..0de41ddf4c2f 100644 --- a/includes/libs/Message/ScalarParam.php +++ b/includes/libs/Message/ScalarParam.php @@ -20,6 +20,7 @@ class ScalarParam extends MessageParam { * * @param string $type One of the ParamType constants. * @param string|int|float|MessageValue|Stringable $value + * Using Stringable objects is deprecated since 1.43. */ public function __construct( $type, $value ) { if ( $type === ParamType::LIST ) { @@ -27,8 +28,11 @@ class ScalarParam extends MessageParam { 'ParamType::LIST cannot be used with ScalarParam; use ListParam instead' ); } - if ( !is_string( $value ) && !is_numeric( $value ) && - !$value instanceof MessageValue && !$value instanceof Stringable ) { + if ( $value instanceof Stringable ) { + wfDeprecatedMsg( 'Passing Stringable objects to ScalarParam' . + ' was deprecated in MediaWiki 1.43', '1.43' ); + } elseif ( !is_string( $value ) && !is_numeric( $value ) && + !$value instanceof MessageValue ) { $type = is_object( $value ) ? get_class( $value ) : gettype( $value ); throw new InvalidArgumentException( "Scalar parameter must be a string, number, or MessageValue; got $type" diff --git a/tests/phpunit/includes/Message/TextFormatterTest.php b/tests/phpunit/includes/Message/TextFormatterTest.php index 03c0495d7f9d..0ffaf7565490 100644 --- a/tests/phpunit/includes/Message/TextFormatterTest.php +++ b/tests/phpunit/includes/Message/TextFormatterTest.php @@ -95,7 +95,8 @@ class TextFormatterTest extends MediaWikiIntegrationTestCase { 'test (group-bot) $2' ]; - yield [ ( new MessageValue( 'test' ) ) + // Deprecated, silence deprecation warnings + @yield [ ( new MessageValue( 'test' ) ) ->objectParams( new UserGroupMembershipParam( 'bot', new UserIdentityValue( 1, 'user' ) ) ), diff --git a/tests/phpunit/includes/language/MessageTest.php b/tests/phpunit/includes/language/MessageTest.php index d34dfec0055f..1aa91a75456b 100644 --- a/tests/phpunit/includes/language/MessageTest.php +++ b/tests/phpunit/includes/language/MessageTest.php @@ -493,6 +493,8 @@ class MessageTest extends MediaWikiLangTestCase { } public function testUserGroupMemberParams() { + $this->expectDeprecationAndContinue( '/UserGroupMembershipParam/' ); + $this->expectDeprecationAndContinue( '/objectParams/' ); $lang = $this->getServiceContainer()->getLanguageFactory()->getLanguage( 'qqx' ); $msg = new RawMessage( '$1' ); $this->setUserLang( $lang ); diff --git a/tests/phpunit/unit/includes/Message/UserGroupMembershipParamTest.php b/tests/phpunit/unit/includes/Message/UserGroupMembershipParamTest.php index cf758e7580cb..6d02a865c3ac 100644 --- a/tests/phpunit/unit/includes/Message/UserGroupMembershipParamTest.php +++ b/tests/phpunit/unit/includes/Message/UserGroupMembershipParamTest.php @@ -41,7 +41,7 @@ class UserGroupMembershipParamTest extends MediaWikiUnitTestCase { } public function testConstruct() { - $param = new UserGroupMembershipParam( $this->group, $this->member ); + $param = @new UserGroupMembershipParam( $this->group, $this->member ); $this->assertSame( $this->group, $param->getGroup() ); $this->assertSame( $this->member, $param->getMember() ); } @@ -50,7 +50,7 @@ class UserGroupMembershipParamTest extends MediaWikiUnitTestCase { $groupMock = 'users'; $userNameMock = 'MockUser'; $userIdentityMock = new UserIdentityValue( 1, $userNameMock ); - $param = new UserGroupMembershipParam( $groupMock, $userIdentityMock ); + $param = @new UserGroupMembershipParam( $groupMock, $userIdentityMock ); $this->assertSame( $groupMock, $param->getGroup(), 'Group name should match the constructor argument.' ); } @@ -59,7 +59,7 @@ class UserGroupMembershipParamTest extends MediaWikiUnitTestCase { $groupMock = 'users'; $userNameMock = 'MockUser'; $userIdentityMock = new UserIdentityValue( 1, $userNameMock ); - $param = new UserGroupMembershipParam( $groupMock, $userIdentityMock ); + $param = @new UserGroupMembershipParam( $groupMock, $userIdentityMock ); $this->assertSame( $userIdentityMock, $param->getMember(), 'User identity object should match the constructor argument.' ); } @@ -70,7 +70,7 @@ class UserGroupMembershipParamTest extends MediaWikiUnitTestCase { $userIdentityMock = new UserIdentityValue( 2, 'MockAdminUser' ); // Create the UserGroupMembershipParam instance with mocks. - $param = new UserGroupMembershipParam( $groupMock, $userIdentityMock ); + $param = @new UserGroupMembershipParam( $groupMock, $userIdentityMock ); $expectedString = 'sysop:MockAdminUser'; // Asserting if the string representation is as expected. $this->assertSame( $expectedString, (string)$param, diff --git a/tests/phpunit/unit/includes/libs/Message/MessageValueTest.php b/tests/phpunit/unit/includes/libs/Message/MessageValueTest.php index fc408b01a6a5..45cbe6092f4d 100644 --- a/tests/phpunit/unit/includes/libs/Message/MessageValueTest.php +++ b/tests/phpunit/unit/includes/libs/Message/MessageValueTest.php @@ -188,7 +188,7 @@ class MessageValueTest extends TestCase { public function testUserGroupMemberParams() { $mv = new MessageValue( 'key' ); - $mv2 = $mv->objectParams( + $mv2 = @$mv->objectParams( new UserGroupMembershipParam( 'bot', new UserIdentityValue( 1, 'user' ) ) ); $this->assertSame( '<message key="key">' . |