diff --git a/composer.json b/composer.json index f2eeea136..d8e774f2d 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,8 @@ "doctrine/cache": "^1.0", "doctrine/collections": "^1.0", "doctrine/lexer": "^1.0", - "doctrine/annotations": "^1.0" + "doctrine/annotations": "^1.0", + "doctrine/event-manager": "^1.0@dev" }, "require-dev": { "phpunit/phpunit": "^6.3", diff --git a/lib/Doctrine/Common/EventArgs.php b/lib/Doctrine/Common/EventArgs.php deleted file mode 100644 index 59eace4e0..000000000 --- a/lib/Doctrine/Common/EventArgs.php +++ /dev/null @@ -1,49 +0,0 @@ - - * @author Jonathan Wage - * @author Roman Borschel - */ -class EventArgs -{ - /** - * Single instance of EventArgs. - * - * @var EventArgs - */ - private static $_emptyEventArgsInstance; - - /** - * Gets the single, empty and immutable EventArgs instance. - * - * This instance will be used when events are dispatched without any parameter, - * like this: EventManager::dispatchEvent('eventname'); - * - * The benefit from this is that only one empty instance is instantiated and shared - * (otherwise there would be instances for every dispatched in the abovementioned form). - * - * @see EventManager::dispatchEvent - * - * @link https://msdn.microsoft.com/en-us/library/system.eventargs.aspx - * - * @return EventArgs - */ - public static function getEmptyInstance() - { - if ( ! self::$_emptyEventArgsInstance) { - self::$_emptyEventArgsInstance = new EventArgs; - } - - return self::$_emptyEventArgsInstance; - } -} diff --git a/lib/Doctrine/Common/EventManager.php b/lib/Doctrine/Common/EventManager.php deleted file mode 100644 index fb87ea429..000000000 --- a/lib/Doctrine/Common/EventManager.php +++ /dev/null @@ -1,133 +0,0 @@ - - * @author Jonathan Wage - * @author Roman Borschel - */ -class EventManager -{ - /** - * Map of registered listeners. - * => - * - * @var array - */ - private $_listeners = []; - - /** - * Dispatches an event to all registered listeners. - * - * @param string $eventName The name of the event to dispatch. The name of the event is - * the name of the method that is invoked on listeners. - * @param EventArgs|null $eventArgs The event arguments to pass to the event handlers/listeners. - * If not supplied, the single empty EventArgs instance is used. - * - * @return void - */ - public function dispatchEvent($eventName, EventArgs $eventArgs = null) - { - if (isset($this->_listeners[$eventName])) { - $eventArgs = $eventArgs === null ? EventArgs::getEmptyInstance() : $eventArgs; - - foreach ($this->_listeners[$eventName] as $listener) { - $listener->$eventName($eventArgs); - } - } - } - - /** - * Gets the listeners of a specific event or all listeners. - * - * @param string|null $event The name of the event. - * - * @return array The event listeners for the specified event, or all event listeners. - */ - public function getListeners($event = null) - { - return $event ? $this->_listeners[$event] : $this->_listeners; - } - - /** - * Checks whether an event has any registered listeners. - * - * @param string $event - * - * @return boolean TRUE if the specified event has any listeners, FALSE otherwise. - */ - public function hasListeners($event) - { - return ! empty($this->_listeners[$event]); - } - - /** - * Adds an event listener that listens on the specified events. - * - * @param string|array $events The event(s) to listen on. - * @param object $listener The listener object. - * - * @return void - */ - public function addEventListener($events, $listener) - { - // Picks the hash code related to that listener - $hash = spl_object_hash($listener); - - foreach ((array) $events as $event) { - // Overrides listener if a previous one was associated already - // Prevents duplicate listeners on same event (same instance only) - $this->_listeners[$event][$hash] = $listener; - } - } - - /** - * Removes an event listener from the specified events. - * - * @param string|array $events - * @param object $listener - * - * @return void - */ - public function removeEventListener($events, $listener) - { - // Picks the hash code related to that listener - $hash = spl_object_hash($listener); - - foreach ((array) $events as $event) { - unset($this->_listeners[$event][$hash]); - } - } - - /** - * Adds an EventSubscriber. The subscriber is asked for all the events it is - * interested in and added as a listener for these events. - * - * @param \Doctrine\Common\EventSubscriber $subscriber The subscriber. - * - * @return void - */ - public function addEventSubscriber(EventSubscriber $subscriber) - { - $this->addEventListener($subscriber->getSubscribedEvents(), $subscriber); - } - - /** - * Removes an EventSubscriber. The subscriber is asked for all the events it is - * interested in and removed as a listener for these events. - * - * @param \Doctrine\Common\EventSubscriber $subscriber The subscriber. - * - * @return void - */ - public function removeEventSubscriber(EventSubscriber $subscriber) - { - $this->removeEventListener($subscriber->getSubscribedEvents(), $subscriber); - } -} diff --git a/lib/Doctrine/Common/EventSubscriber.php b/lib/Doctrine/Common/EventSubscriber.php deleted file mode 100644 index 8d6fff956..000000000 --- a/lib/Doctrine/Common/EventSubscriber.php +++ /dev/null @@ -1,24 +0,0 @@ - - * @author Jonathan Wage - * @author Roman Borschel - */ -interface EventSubscriber -{ - /** - * Returns an array of events this subscriber wants to listen to. - * - * @return array - */ - public function getSubscribedEvents(); -} diff --git a/tests/Doctrine/Tests/Common/EventManagerTest.php b/tests/Doctrine/Tests/Common/EventManagerTest.php deleted file mode 100644 index 3e76269ee..000000000 --- a/tests/Doctrine/Tests/Common/EventManagerTest.php +++ /dev/null @@ -1,87 +0,0 @@ -_eventManager = new EventManager; - $this->_preFooInvoked = false; - $this->_postFooInvoked = false; - } - - public function testInitialState() - { - self::assertEquals([], $this->_eventManager->getListeners()); - self::assertFalse($this->_eventManager->hasListeners(self::PRE_FOO)); - self::assertFalse($this->_eventManager->hasListeners(self::POST_FOO)); - } - - public function testAddEventListener() - { - $this->_eventManager->addEventListener(['preFoo', 'postFoo'], $this); - self::assertTrue($this->_eventManager->hasListeners(self::PRE_FOO)); - self::assertTrue($this->_eventManager->hasListeners(self::POST_FOO)); - self::assertEquals(1, count($this->_eventManager->getListeners(self::PRE_FOO))); - self::assertEquals(1, count($this->_eventManager->getListeners(self::POST_FOO))); - self::assertEquals(2, count($this->_eventManager->getListeners())); - } - - public function testDispatchEvent() - { - $this->_eventManager->addEventListener(['preFoo', 'postFoo'], $this); - $this->_eventManager->dispatchEvent(self::PRE_FOO); - self::assertTrue($this->_preFooInvoked); - self::assertFalse($this->_postFooInvoked); - } - - public function testRemoveEventListener() - { - $this->_eventManager->addEventListener(['preBar'], $this); - self::assertTrue($this->_eventManager->hasListeners(self::PRE_BAR)); - $this->_eventManager->removeEventListener(['preBar'], $this); - self::assertFalse($this->_eventManager->hasListeners(self::PRE_BAR)); - } - - public function testAddEventSubscriber() - { - $eventSubscriber = new TestEventSubscriber(); - $this->_eventManager->addEventSubscriber($eventSubscriber); - self::assertTrue($this->_eventManager->hasListeners(self::PRE_FOO)); - self::assertTrue($this->_eventManager->hasListeners(self::POST_FOO)); - } - - /* Listener methods */ - - public function preFoo(EventArgs $e) - { - $this->_preFooInvoked = true; - } - - public function postFoo(EventArgs $e) - { - $this->_postFooInvoked = true; - } -} - -class TestEventSubscriber implements \Doctrine\Common\EventSubscriber -{ - public function getSubscribedEvents() - { - return ['preFoo', 'postFoo']; - } -}