auth: Use phan templates for getRequestByClass
authorDaimona Eaytoy <daimona.wiki@gmail.com>
Sat, 7 Sep 2019 13:33:24 +0000 (15:33 +0200)
committerDaimona Eaytoy <daimona.wiki@gmail.com>
Sun, 8 Sep 2019 15:44:46 +0000 (15:44 +0000)
Phan is clever enough to understand when the return value depends on the
name of the string passed in. This avoids lots of @phan-var annotations
in all subclasses.

Note that PHPCS rejects @template, ref T232256.

Change-Id: I7b7c7fae9c80320cad41bedc2972a3a5e22e19b0

includes/auth/AuthenticationRequest.php
includes/auth/ResetPasswordSecondaryAuthenticationProvider.php

index e7527d1..168ae85 100644 (file)
@@ -246,13 +246,18 @@ abstract class AuthenticationRequest {
        }
 
        /**
+        * @codingStandardsIgnoreStart
+        * @template T
+        * @codingStandardsIgnoreEnd
         * Select a request by class name.
         * @param AuthenticationRequest[] $reqs
         * @param string $class Class name
+        * @phan-param class-string<T> $class
         * @param bool $allowSubclasses If true, also returns any request that's a subclass of the given
         *   class.
         * @return AuthenticationRequest|null Returns null if there is not exactly
         *  one matching request.
+        * @phan-return T|null
         */
        public static function getRequestByClass( array $reqs, $class, $allowSubclasses = false ) {
                $requests = array_filter( $reqs, function ( $req ) use ( $class, $allowSubclasses ) {
index c831fc8..25a1754 100644 (file)
@@ -96,7 +96,9 @@ class ResetPasswordSecondaryAuthenticationProvider extends AbstractSecondaryAuth
                        }
                }
 
+               /** @var PasswordAuthenticationRequest $needReq */
                $needReq = $data->req ?? new PasswordAuthenticationRequest();
+               '@phan-var PasswordAuthenticationRequest $needReq';
                if ( !$needReq->action ) {
                        $needReq->action = AuthManager::ACTION_CHANGE;
                }