From 0360c07ec1b819e01a8e18275b30b33ffac5b5e9 Mon Sep 17 00:00:00 2001 From: Alex Pott Date: Wed, 19 Jun 2013 01:37:47 +0200 Subject: [PATCH] Issue #2022087 by damiankloip: Add module owner to plugin definition in AnnotatedClassDiscovery. --- .../Discovery/AnnotatedClassDiscovery.php | 33 +++++++++++++++++++ .../Discovery/AnnotatedClassDiscoveryTest.php | 4 +++ .../CustomAnnotationClassDiscoveryTest.php | 2 ++ 3 files changed, 39 insertions(+) diff --git a/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php b/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php index 8a45afc7669..47ab25b8b1b 100644 --- a/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php +++ b/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php @@ -62,6 +62,39 @@ class AnnotatedClassDiscovery extends ComponentAnnotatedClassDiscovery { parent::__construct($plugin_namespaces, $annotation_namespaces, $plugin_definition_annotation_name); } + /** + * {@inheritdoc} + */ + public function getDefinitions() { + $definitions = parent::getDefinitions(); + foreach ($definitions as &$definition) { + // Extract the module name from the class namespace if it's not set. + if (!isset($definition['module'])) { + $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} */ 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 0071f700c88..fb44b292e16 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 @@ class AnnotatedClassDiscoveryTest extends DiscoveryTestBase { 'label' => 'Apple', 'color' => 'green', 'class' => 'Drupal\plugin_test\Plugin\plugin_test\fruit\Apple', + 'module' => 'plugin_test', ), 'banana' => array( 'id' => 'banana', @@ -39,18 +40,21 @@ class AnnotatedClassDiscoveryTest extends DiscoveryTestBase { '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 5ed2c5ecac7..6b9bdefd326 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 @@ class CustomAnnotationClassDiscoveryTest extends DiscoveryTestBase { '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'));