From 919a19015336f37b283bc72233d172709d14dd97 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Wed, 14 Aug 2013 18:27:54 +0200 Subject: [PATCH] Add an EventSubscriberInterface which may also be implemented by plugins --- src/Composer/EventDispatcher/Event.php | 3 -- .../EventDispatcher/EventDispatcher.php | 2 +- .../EventSubscriberInterface.php | 48 +++++++++++++++++++ src/Composer/Plugin/PluginManager.php | 5 +- 4 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 src/Composer/EventDispatcher/EventSubscriberInterface.php diff --git a/src/Composer/EventDispatcher/Event.php b/src/Composer/EventDispatcher/Event.php index c0a887372..8a9352653 100644 --- a/src/Composer/EventDispatcher/Event.php +++ b/src/Composer/EventDispatcher/Event.php @@ -12,9 +12,6 @@ namespace Composer\EventDispatcher; -use Composer\Composer; -use Composer\IO\IOInterface; - /** * The base event class * diff --git a/src/Composer/EventDispatcher/EventDispatcher.php b/src/Composer/EventDispatcher/EventDispatcher.php index d15ceb212..f47e77044 100644 --- a/src/Composer/EventDispatcher/EventDispatcher.php +++ b/src/Composer/EventDispatcher/EventDispatcher.php @@ -170,7 +170,7 @@ class EventDispatcher $this->listeners[$eventName][$priority][] = $listener; } - protected function addSubscriber($subscriber) + public function addSubscriber(EventSubscriberInterface $subscriber) { foreach ($subscriber->getSubscribedEvents() as $eventName => $params) { if (is_string($params)) { diff --git a/src/Composer/EventDispatcher/EventSubscriberInterface.php b/src/Composer/EventDispatcher/EventSubscriberInterface.php new file mode 100644 index 000000000..6b0c4ca06 --- /dev/null +++ b/src/Composer/EventDispatcher/EventSubscriberInterface.php @@ -0,0 +1,48 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\EventDispatcher; + +/** + * An EventSubscriber knows which events it is interested in. + * + * If an EventSubscriber is added to an EventDispatcher, the manager invokes + * {@link getSubscribedEvents} and registers the subscriber as a listener for all + * returned events. + * + * @author Guilherme Blanco + * @author Jonathan Wage + * @author Roman Borschel + * @author Bernhard Schussek + */ +interface EventSubscriberInterface +{ + /** + * Returns an array of event names this subscriber wants to listen to. + * + * The array keys are event names and the value can be: + * + * * The method name to call (priority defaults to 0) + * * An array composed of the method name to call and the priority + * * An array of arrays composed of the method names to call and respective + * priorities, or 0 if unset + * + * For instance: + * + * * array('eventName' => 'methodName') + * * array('eventName' => array('methodName', $priority)) + * * array('eventName' => array(array('methodName1', $priority), array('methodName2')) + * + * @return array The event names to listen to + */ + public static function getSubscribedEvents(); +} diff --git a/src/Composer/Plugin/PluginManager.php b/src/Composer/Plugin/PluginManager.php index 1d424627a..74c0081c3 100644 --- a/src/Composer/Plugin/PluginManager.php +++ b/src/Composer/Plugin/PluginManager.php @@ -13,6 +13,7 @@ namespace Composer\Plugin; use Composer\Composer; +use Composer\EventDispatcher\EventSubscriberInterface; use Composer\Package\Package; use Composer\IO\IOInterface; use Composer\Package\PackageInterface; @@ -65,8 +66,8 @@ class PluginManager $this->plugins[] = $plugin; $plugin->activate($this->composer); - if ($plugin instanceof \Symfony\Component\EventDispatcher\EventSubscriberInterface) { - $this->composer->getPluginEventDispatcher()->addSubscriber($plugin); + if ($plugin instanceof EventSubscriberInterface) { + $this->composer->getEventDispatcher()->addSubscriber($plugin); } }