diff --git a/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php b/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php index 8a45afc..08344d6 100644 --- a/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php +++ b/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php @@ -65,6 +65,37 @@ function __construct($subdir, \Traversable $root_namespaces, $annotation_namespa /** * {@inheritdoc} */ + public function getDefinitions() { + $definitions = parent::getDefinitions(); + foreach ($definitions as &$definition) { + // Extract the module name from the class namespace. + $definition['module'] = $this->getModuleFromNamespace($definition['class']); + } + return $definitions; + } + + /** + * Extracts a module name from a Drupal namespace. + * + * @param string $namespace + * The namespace to extract the module name from. + * + * @return string|null + * The matches module name, or NULL otherwise. + */ + protected function getModuleFromNamespace($namespace) { + preg_match('|^Drupal\\\\(?[\w]+)\\\\|', $namespace, $matches); + + if (isset($matches['module'])) { + return $matches['module']; + } + + return NULL; + } + + /** + * {@inheritdoc} + */ protected function getPluginNamespaces() { $plugin_namespaces = array(); foreach ($this->rootNamespacesIterator as $namespace => $dir) { diff --git a/core/modules/system/lib/Drupal/system/Tests/Plugin/Discovery/AnnotatedClassDiscoveryTest.php b/core/modules/system/lib/Drupal/system/Tests/Plugin/Discovery/AnnotatedClassDiscoveryTest.php index 0071f70..fb44b29 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Plugin/Discovery/AnnotatedClassDiscoveryTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Plugin/Discovery/AnnotatedClassDiscoveryTest.php @@ -30,6 +30,7 @@ public function setUp() { 'label' => 'Apple', 'color' => 'green', 'class' => 'Drupal\plugin_test\Plugin\plugin_test\fruit\Apple', + 'module' => 'plugin_test', ), 'banana' => array( 'id' => 'banana', @@ -39,18 +40,21 @@ public function setUp() { 'bread' => t('Banana bread'), ), 'class' => 'Drupal\plugin_test\Plugin\plugin_test\fruit\Banana', + 'module' => 'plugin_test', ), 'cherry' => array( 'id' => 'cherry', 'label' => 'Cherry', 'color' => 'red', 'class' => 'Drupal\plugin_test\Plugin\plugin_test\fruit\Cherry', + 'module' => 'plugin_test', ), 'orange' => array( 'id' => 'orange', 'label' => 'Orange', 'color' => 'orange', 'class' => 'Drupal\plugin_test\Plugin\plugin_test\fruit\Orange', + 'module' => 'plugin_test', ), ); $namespaces = new \ArrayObject(array('Drupal\plugin_test' => DRUPAL_ROOT . '/core/modules/system/tests/modules/plugin_test/lib')); diff --git a/core/modules/system/lib/Drupal/system/Tests/Plugin/Discovery/CustomAnnotationClassDiscoveryTest.php b/core/modules/system/lib/Drupal/system/Tests/Plugin/Discovery/CustomAnnotationClassDiscoveryTest.php index 5ed2c5e..6b9bdef 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Plugin/Discovery/CustomAnnotationClassDiscoveryTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Plugin/Discovery/CustomAnnotationClassDiscoveryTest.php @@ -32,11 +32,13 @@ protected function setUp() { 'id' => 'example_1', 'custom' => 'John', 'class' => 'Drupal\plugin_test\Plugin\plugin_test\custom_annotation\Example1', + 'module' => 'plugin_test', ), 'example_2' => array( 'id' => 'example_2', 'custom' => 'Paul', 'class' => 'Drupal\plugin_test\Plugin\plugin_test\custom_annotation\Example2', + 'module' => 'plugin_test', ), ); $root_namespaces = new \ArrayObject(array('Drupal\plugin_test' => DRUPAL_ROOT . '/core/modules/system/tests/modules/plugin_test/lib'));