--- /dev/null
+<?php
+
+namespace Drupal\DrupalExtension\Compiler;
+
+use Symfony\Component\DependencyInjection\Reference,
+ Symfony\Component\DependencyInjection\ContainerBuilder,
+ Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
+
+/**
+ * Event subscribers pass - registers all available event subscribers.
+ */
+class EventSubscriberPass implements CompilerPassInterface {
+ /**
+ * Processes container.
+ *
+ * @param ContainerBuilder $container
+ */
+ public function process(ContainerBuilder $container) {
+ if (!$container->hasDefinition('drupal.event_dispatcher')) {
+ return;
+ }
+ $dispatcherDefinition = $container->getDefinition('drupal.event_dispatcher');
+
+ foreach ($container->findTaggedServiceIds('drupal.event_subscriber') as $id => $attributes) {
+ foreach ($attributes as $attribute) {
+ $priority = isset($attribute['priority']) ? intval($attribute['priority']) : 0;
+ $dispatcherDefinition->addMethodCall(
+ 'addSubscriber', array(new Reference($id), $priority)
+ );
+ }
+ }
+ }
+}