public function getNotCalledListeners(): array
    {
        try {
            $allListeners = $this->eventManager->getListeners();
        } catch (Throwable $e) {
            $this->logger->info('An exception was thrown while getting the uncalled listeners.', ['exception' => $e]);

            // unable to retrieve the uncalled listeners
            return [];
        }

        $notCalled = [];

        foreach ($allListeners as $eventName => $listeners) {
            foreach ($listeners as $listener) {
                $called = false;

                if (isset($this->called[$eventName])) {
                    foreach ($this->called[$eventName] as $calledListener) {
                        /** @var WrappedListener $calledListener */
                        if ($calledListener->getWrappedListener() === $listener) {
                            $called = true;

                            break;
                        }
                    }
                }

                if (! $called) {
                    if (! $listener instanceof WrappedListener) {
                        $listener = new WrappedListener($listener, null, $this->stopwatch, $this);
                    }

                    $notCalled[$eventName][] = $listener->getInfo($eventName);
                }
            }
        }

        \uasort($notCalled, [$this, 'sortListenersByPriority']);

        return $notCalled;
    }