X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fcore%2Flib%2FDrupal%2FCore%2FPlugin%2FPluginDependencyTrait.php;h=02f7c0242833047f809f8f686071ddcba444fb53;hb=0bf8d09d2542548982e81a441b1f16e75873a04f;hp=b9dd9e659d61ffa2e917b82400e317d75e4c9e74;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/web/core/lib/Drupal/Core/Plugin/PluginDependencyTrait.php b/web/core/lib/Drupal/Core/Plugin/PluginDependencyTrait.php index b9dd9e659..02f7c0242 100644 --- a/web/core/lib/Drupal/Core/Plugin/PluginDependencyTrait.php +++ b/web/core/lib/Drupal/Core/Plugin/PluginDependencyTrait.php @@ -5,6 +5,7 @@ namespace Drupal\Core\Plugin; use Drupal\Component\Plugin\Definition\PluginDefinitionInterface; use Drupal\Component\Plugin\DependentPluginInterface; use Drupal\Component\Plugin\PluginInspectionInterface; +use Drupal\Component\Utility\NestedArray; use Drupal\Core\Entity\DependencyTrait; use Drupal\Core\Plugin\Definition\DependentPluginDefinitionInterface; @@ -16,7 +17,7 @@ trait PluginDependencyTrait { use DependencyTrait; /** - * Calculates and adds dependencies of a specific plugin instance. + * Calculates and returns dependencies of a specific plugin instance. * * Dependencies are added for the module that provides the plugin, as well * as any dependencies declared by the instance's calculateDependencies() @@ -25,28 +26,47 @@ trait PluginDependencyTrait { * * @param \Drupal\Component\Plugin\PluginInspectionInterface $instance * The plugin instance. + * + * @return array + * An array of dependencies keyed by the type of dependency. */ - protected function calculatePluginDependencies(PluginInspectionInterface $instance) { + protected function getPluginDependencies(PluginInspectionInterface $instance) { + $dependencies = []; $definition = $instance->getPluginDefinition(); - if ($definition instanceof PluginDefinitionInterface) { - $this->addDependency('module', $definition->getProvider()); + $dependencies['module'][] = $definition->getProvider(); if ($definition instanceof DependentPluginDefinitionInterface && $config_dependencies = $definition->getConfigDependencies()) { - $this->addDependencies($config_dependencies); + $dependencies = NestedArray::mergeDeep($dependencies, $config_dependencies); } } elseif (is_array($definition)) { - $this->addDependency('module', $definition['provider']); + $dependencies['module'][] = $definition['provider']; // Plugins can declare additional dependencies in their definition. if (isset($definition['config_dependencies'])) { - $this->addDependencies($definition['config_dependencies']); + $dependencies = NestedArray::mergeDeep($dependencies, $definition['config_dependencies']); } } // If a plugin is dependent, calculate its dependencies. if ($instance instanceof DependentPluginInterface && $plugin_dependencies = $instance->calculateDependencies()) { - $this->addDependencies($plugin_dependencies); + $dependencies = NestedArray::mergeDeep($dependencies, $plugin_dependencies); } + return $dependencies; + } + + /** + * Calculates and adds dependencies of a specific plugin instance. + * + * Dependencies are added for the module that provides the plugin, as well + * as any dependencies declared by the instance's calculateDependencies() + * method, if it implements + * \Drupal\Component\Plugin\DependentPluginInterface. + * + * @param \Drupal\Component\Plugin\PluginInspectionInterface $instance + * The plugin instance. + */ + protected function calculatePluginDependencies(PluginInspectionInterface $instance) { + $this->addDependencies($this->getPluginDependencies($instance)); } }