Provider   A
last analyzed

Complexity

Total Complexity 2

Size/Duplication

Total Lines 13
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 2
eloc 4
c 1
b 0
f 0
dl 0
loc 13
ccs 6
cts 6
cp 1
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 2 1
A getListenersForEvent() 0 7 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\EventDispatcher\Provider;
6
7
use Psr\EventDispatcher\ListenerProviderInterface;
8
9
/**
10
 * Provider is a listener provider that registers event listeners for interfaces used in callable type-hints
11
 * and gives out a list of handlers by event interface provided for further use with Dispatcher.
12
 *
13
 * ```php
14
 * $listeners = (new ListenerCollection())->add(function (AfterDocumentProcessed $event) {
15
 *    $document = $event->getDocument();
16
 *    // do something with document
17
 * });
18
 *
19
 * $provider = new Yiisoft\EventDispatcher\Provider\Provider($listeners);
20
 * ```
21
 */
22
final class Provider implements ListenerProviderInterface
23
{
24 7
    public function __construct(private ListenerCollection $listeners)
25
    {
26 7
    }
27
28 7
    public function getListenersForEvent(object $event): iterable
29
    {
30 7
        yield from $this->listeners->getForEvents($event::class);
31
        /** @psalm-suppress MixedArgument */
32 7
        yield from $this->listeners->getForEvents(...array_values(class_parents($event)));
33
        /** @psalm-suppress MixedArgument */
34 7
        yield from $this->listeners->getForEvents(...array_values(class_implements($event)));
35
    }
36
}
37