vendor/symfony/event-dispatcher/Debug/WrappedListener.php line 111

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\EventDispatcher\Debug;
  11. use Symfony\Component\EventDispatcher\Event;
  12. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  13. use Symfony\Component\Stopwatch\Stopwatch;
  14. use Symfony\Component\VarDumper\Caster\ClassStub;
  15. /**
  16.  * @author Fabien Potencier <fabien@symfony.com>
  17.  */
  18. class WrappedListener
  19. {
  20.     private $listener;
  21.     private $name;
  22.     private $called;
  23.     private $stoppedPropagation;
  24.     private $stopwatch;
  25.     private $dispatcher;
  26.     private $pretty;
  27.     private $stub;
  28.     private static $hasClassStub;
  29.     public function __construct($listener$nameStopwatch $stopwatchEventDispatcherInterface $dispatcher null)
  30.     {
  31.         $this->listener $listener;
  32.         $this->stopwatch $stopwatch;
  33.         $this->dispatcher $dispatcher;
  34.         $this->called false;
  35.         $this->stoppedPropagation false;
  36.         if (\is_array($listener)) {
  37.             $this->name = \is_object($listener[0]) ? \get_class($listener[0]) : $listener[0];
  38.             $this->pretty $this->name.'::'.$listener[1];
  39.         } elseif ($listener instanceof \Closure) {
  40.             $r = new \ReflectionFunction($listener);
  41.             if (false !== strpos($r->name'{closure}')) {
  42.                 $this->pretty $this->name 'closure';
  43.             } elseif ($class $r->getClosureScopeClass()) {
  44.                 $this->name $class->name;
  45.                 $this->pretty $this->name.'::'.$r->name;
  46.             } else {
  47.                 $this->pretty $this->name $r->name;
  48.             }
  49.         } elseif (\is_string($listener)) {
  50.             $this->pretty $this->name $listener;
  51.         } else {
  52.             $this->name = \get_class($listener);
  53.             $this->pretty $this->name.'::__invoke';
  54.         }
  55.         if (null !== $name) {
  56.             $this->name $name;
  57.         }
  58.         if (null === self::$hasClassStub) {
  59.             self::$hasClassStub class_exists(ClassStub::class);
  60.         }
  61.     }
  62.     public function getWrappedListener()
  63.     {
  64.         return $this->listener;
  65.     }
  66.     public function wasCalled()
  67.     {
  68.         return $this->called;
  69.     }
  70.     public function stoppedPropagation()
  71.     {
  72.         return $this->stoppedPropagation;
  73.     }
  74.     public function getPretty()
  75.     {
  76.         return $this->pretty;
  77.     }
  78.     public function getInfo($eventName)
  79.     {
  80.         if (null === $this->stub) {
  81.             $this->stub self::$hasClassStub ? new ClassStub($this->pretty.'()'$this->listener) : $this->pretty.'()';
  82.         }
  83.         return [
  84.             'event' => $eventName,
  85.             'priority' => null !== $this->dispatcher $this->dispatcher->getListenerPriority($eventName$this->listener) : null,
  86.             'pretty' => $this->pretty,
  87.             'stub' => $this->stub,
  88.         ];
  89.     }
  90.     public function __invoke(Event $event$eventNameEventDispatcherInterface $dispatcher)
  91.     {
  92.         $this->called true;
  93.         $e $this->stopwatch->start($this->name'event_listener');
  94.         ($this->listener)($event$eventName$this->dispatcher ?: $dispatcher);
  95.         if ($e->isStarted()) {
  96.             $e->stop();
  97.         }
  98.         if ($event->isPropagationStopped()) {
  99.             $this->stoppedPropagation true;
  100.         }
  101.     }
  102. }