From 78059d455b8355fa6448e7f3d86a829f52252431 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20H=C3=A4drich?= <11225821+shaedrich@users.noreply.github.com> Date: Mon, 1 Dec 2025 15:09:01 +0100 Subject: [PATCH 1/3] Improve types in `\Illuminate\Events\Dispatcher` --- src/Illuminate/Events/Dispatcher.php | 49 +++++++++++++++------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/src/Illuminate/Events/Dispatcher.php b/src/Illuminate/Events/Dispatcher.php index d04b7904d37b..b229cd10eb10 100755 --- a/src/Illuminate/Events/Dispatcher.php +++ b/src/Illuminate/Events/Dispatcher.php @@ -37,28 +37,28 @@ class Dispatcher implements DispatcherContract /** * The registered event listeners. * - * @var array + * @var array */ protected $listeners = []; /** * The wildcard listeners. * - * @var array + * @var array */ protected $wildcards = []; /** * The cached wildcard listeners. * - * @var array + * @var array */ protected $wildcardsCache = []; /** * The queue resolver instance. * - * @var callable + * @var callable(): \Illuminate\Contracts\Queue\Queue */ protected $queueResolver; @@ -86,7 +86,7 @@ class Dispatcher implements DispatcherContract /** * The specific events to defer (null means defer all events). * - * @var array|null + * @var string[]|null */ protected $eventsToDefer = null; @@ -231,8 +231,8 @@ public function subscribe($subscriber) /** * Resolve the subscriber instance. * - * @param object|string $subscriber - * @return mixed + * @param object|class-string $subscriber + * @return $subscriber is object ? object : mixed */ protected function resolveSubscriber($subscriber) { @@ -339,7 +339,7 @@ protected function invokeListeners($event, $payload, $halt = false) * * @param mixed $event * @param mixed $payload - * @return array + * @return array{string, array} */ protected function parseEventAndPayload($event, $payload) { @@ -466,7 +466,7 @@ protected function prepareListeners(string $eventName) /** * Register an event listener with the dispatcher. * - * @param \Closure|string|array $listener + * @param \Closure|string|array{class-string, string} $listener * @param bool $wildcard * @return \Closure */ @@ -512,7 +512,7 @@ public function createClassListener($listener, $wildcard = false) /** * Create the class based event callable. * - * @param array|string $listener + * @param array{class-string, string}|string $listener * @return callable */ protected function createClassCallable($listener) @@ -540,7 +540,7 @@ protected function createClassCallable($listener) * Parse the class listener into class and method. * * @param string $listener - * @return array + * @return array{class-string, string} */ protected function parseClassCallable($listener) { @@ -550,8 +550,9 @@ protected function parseClassCallable($listener) /** * Determine if the event handler class should be queued. * - * @param string $class + * @param class-string $class * @return bool + * @phpstan-assert-if-true \Illuminate\Contracts\Queue\ShouldQueue $class */ protected function handlerShouldBeQueued($class) { @@ -567,9 +568,9 @@ protected function handlerShouldBeQueued($class) /** * Create a callable for putting an event handler on the queue. * - * @param string $class + * @param class-string $class * @param string $method - * @return \Closure + * @return \Closure(): void */ protected function createQueuedHandlerCallable($class, $method) { @@ -620,7 +621,7 @@ function () use ($listener, $method, $payload) { /** * Determine if the event handler wants to be queued. * - * @param string $class + * @param class-string $class * @param array $arguments * @return bool */ @@ -667,10 +668,11 @@ protected function queueHandler($class, $method, $arguments) /** * Create the listener and job for a queued listener. * - * @param string $class + * @template TListener + * @param class-string $class * @param string $method * @param array $arguments - * @return array + * @return array{TListener, mixed} */ protected function createListenerAndJob($class, $method, $arguments) { @@ -686,7 +688,7 @@ protected function createListenerAndJob($class, $method, $arguments) * * @param mixed $listener * @param \Illuminate\Events\CallQueuedListener $job - * @return mixed + * @return \Illuminate\Events\CallQueuedListener */ protected function propagateListenerOptions($listener, $job) { @@ -767,7 +769,7 @@ protected function resolveQueue() /** * Set the queue resolver implementation. * - * @param callable $resolver + * @param callable(): \Illuminate\Contracts\Queue\Queue $resolver * @return $this */ public function setQueueResolver(callable $resolver) @@ -790,7 +792,7 @@ protected function resolveTransactionManager() /** * Set the database transaction manager resolver implementation. * - * @param callable $resolver + * @param (callable(): \Illuminate\Database\DatabaseTransactionsManager|null) $resolver * @return $this */ public function setTransactionManagerResolver(callable $resolver) @@ -803,9 +805,10 @@ public function setTransactionManagerResolver(callable $resolver) /** * Execute the given callback while deferring events, then dispatch all deferred events. * - * @param callable $callback - * @param array|null $events - * @return mixed + * @template TResult + * @param callable(): TResult $callback + * @param string[]|null $events + * @return TResult */ public function defer(callable $callback, ?array $events = null) { From 3bf8281eecebcb006c073826c7d2dd1772b64182 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20H=C3=A4drich?= <11225821+shaedrich@users.noreply.github.com> Date: Mon, 1 Dec 2025 15:13:28 +0100 Subject: [PATCH 2/3] `Dispatcher::until()` must return the same as `Dispatcher::dispatch()` as the former simply calls the latter --- src/Illuminate/Events/Dispatcher.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Events/Dispatcher.php b/src/Illuminate/Events/Dispatcher.php index b229cd10eb10..3ef1c23f5554 100755 --- a/src/Illuminate/Events/Dispatcher.php +++ b/src/Illuminate/Events/Dispatcher.php @@ -248,7 +248,7 @@ protected function resolveSubscriber($subscriber) * * @param string|object $event * @param mixed $payload - * @return mixed + * @return array|null */ public function until($event, $payload = []) { From b32de325f606f987ce16ae0844d740eca7dd2ef5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20H=C3=A4drich?= <11225821+shaedrich@users.noreply.github.com> Date: Mon, 1 Dec 2025 15:20:48 +0100 Subject: [PATCH 3/3] Improve types in `\Illuminate\Database\Eloquent\Concerns\HasEvents` --- .../Database/Eloquent/Concerns/HasEvents.php | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php b/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php index 256129e56d67..cc0368e67da0 100644 --- a/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php +++ b/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php @@ -18,7 +18,7 @@ trait HasEvents * * Allows for object-based events for native Eloquent events. * - * @var array + * @var array */ protected $dispatchesEvents = []; @@ -27,7 +27,7 @@ trait HasEvents * * These are extra user-defined events observers may subscribe to. * - * @var array + * @var string[] */ protected $observables = []; @@ -66,7 +66,7 @@ public static function resolveObserveAttributes() /** * Register observers with the model. * - * @param object|array|string $classes + * @param object|string[]|string $classes * @return void * * @throws \RuntimeException @@ -106,7 +106,7 @@ protected function registerObserver($class) * Resolve the observer's class name from an object or string. * * @param object|string $class - * @return string + * @return class-string * * @throws \InvalidArgumentException */ @@ -126,7 +126,7 @@ private function resolveObserverClassName($class) /** * Get the observable event names. * - * @return array + * @return string[] */ public function getObservableEvents() { @@ -143,7 +143,7 @@ public function getObservableEvents() /** * Set the observable event names. * - * @param array $observables + * @param string[] $observables * @return $this */ public function setObservableEvents(array $observables) @@ -156,7 +156,7 @@ public function setObservableEvents(array $observables) /** * Add an observable event name. * - * @param mixed $observables + * @param string|string[] $observables * @return void */ public function addObservableEvents($observables) @@ -169,7 +169,7 @@ public function addObservableEvents($observables) /** * Remove an observable event name. * - * @param mixed $observables + * @param string|string[] $observables * @return void */ public function removeObservableEvents($observables) @@ -230,8 +230,8 @@ protected function fireModelEvent($event, $halt = true) * Fire a custom model event for the given event. * * @param string $event - * @param string $method - * @return mixed + * @param 'until'|'dispatch' $method + * @return array|null|void */ protected function fireCustomModelEvent($event, $method) {