<?php declare(strict_types=1);namespace Shopware\Core\Framework\Event;use Shopware\Core\Framework\Log\Package;use Symfony\Component\EventDispatcher\EventDispatcherInterface;use Symfony\Component\EventDispatcher\EventSubscriberInterface;#[Package('core')]class NestedEventDispatcher implements EventDispatcherInterface{ /** * @var EventDispatcherInterface */ private $dispatcher; /** * @internal */ public function __construct(EventDispatcherInterface $dispatcher) { $this->dispatcher = $dispatcher; } public function dispatch($event, ?string $eventName = null): object { if ($event instanceof NestedEvent && $events = $event->getEvents()) { foreach ($events as $nested) { $name = null; if ($nested instanceof GenericEvent) { $name = $nested->getName(); } $this->dispatch($nested, $name); } } return $this->dispatcher->dispatch($event, $eventName); } /** * @param callable $listener can not use native type declaration @see https://github.com/symfony/symfony/issues/42283 */ public function addListener(string $eventName, $listener, int $priority = 0): void { $this->dispatcher->addListener($eventName, $listener, $priority); } public function addSubscriber(EventSubscriberInterface $subscriber): void { $this->dispatcher->addSubscriber($subscriber); } /** * @param callable $listener can not use native type hint as it is incompatible with symfony <5.3.4 */ public function removeListener(string $eventName, $listener): void { $this->dispatcher->removeListener($eventName, $listener); } public function removeSubscriber(EventSubscriberInterface $subscriber): void { $this->dispatcher->removeSubscriber($subscriber); } public function getListeners(?string $eventName = null): array { return $this->dispatcher->getListeners($eventName); } /** * @param callable $listener can not use native type hint as it is incompatible with symfony <5.3.4 */ public function getListenerPriority(string $eventName, $listener): ?int { return $this->dispatcher->getListenerPriority($eventName, $listener); } public function hasListeners(?string $eventName = null): bool { return $this->dispatcher->hasListeners($eventName); }}