/**
  * Adds an event subscriber that listens on the specified events.
  * Internally this will convert all handlers to listeners.
  *
  * @param EventSubscriber $eventSubscriber The subscriber
  * @throws \InvalidArgumentException
  *
  * @api
  */
 public function addSubscriber(EventSubscriber $eventSubscriber)
 {
     $listeners = $eventSubscriber->getEvents();
     foreach ($listeners as $listener => $data) {
         if (is_array($data)) {
             $data = new SubscriberConfiguration($data[0], $data[1] ?? self::USE_ALL, $data[2] ?? 100);
         }
         if (!$data instanceof SubscriberConfiguration) {
             throw new \InvalidArgumentException('SubscriberConfiguration for ' . $listener . ' in ' . get_class($eventSubscriber) . ' is invalid!');
         }
         // horrible hack due to array not being a callable in this case ... whut?
         $listenerCallable = function ($events) use($eventSubscriber, $listener) {
             $eventSubscriber->{$listener}($events);
         };
         $this->addWeightedListener($listenerCallable, $data->getUseType(), $data->getWeight(), ...$data->getEvents());
     }
 }