Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/Plugin/PluginDependencyTrait.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | 4c8ae668cc8c |
children | af1871eacc83 |
line wrap: on
line diff
--- a/core/lib/Drupal/Core/Plugin/PluginDependencyTrait.php Tue Jul 10 15:07:59 2018 +0100 +++ b/core/lib/Drupal/Core/Plugin/PluginDependencyTrait.php Thu Feb 28 13:21:36 2019 +0000 @@ -5,6 +5,7 @@ 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,6 +17,44 @@ use DependencyTrait; /** + * 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() + * method, if it implements + * \Drupal\Component\Plugin\DependentPluginInterface. + * + * @param \Drupal\Component\Plugin\PluginInspectionInterface $instance + * The plugin instance. + * + * @return array + * An array of dependencies keyed by the type of dependency. + */ + protected function getPluginDependencies(PluginInspectionInterface $instance) { + $dependencies = []; + $definition = $instance->getPluginDefinition(); + if ($definition instanceof PluginDefinitionInterface) { + $dependencies['module'][] = $definition->getProvider(); + if ($definition instanceof DependentPluginDefinitionInterface && $config_dependencies = $definition->getConfigDependencies()) { + $dependencies = NestedArray::mergeDeep($dependencies, $config_dependencies); + } + } + elseif (is_array($definition)) { + $dependencies['module'][] = $definition['provider']; + // Plugins can declare additional dependencies in their definition. + if (isset($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()) { + $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 @@ -27,26 +66,7 @@ * The plugin instance. */ protected function calculatePluginDependencies(PluginInspectionInterface $instance) { - $definition = $instance->getPluginDefinition(); - - if ($definition instanceof PluginDefinitionInterface) { - $this->addDependency('module', $definition->getProvider()); - if ($definition instanceof DependentPluginDefinitionInterface && $config_dependencies = $definition->getConfigDependencies()) { - $this->addDependencies($config_dependencies); - } - } - elseif (is_array($definition)) { - $this->addDependency('module', $definition['provider']); - // Plugins can declare additional dependencies in their definition. - if (isset($definition['config_dependencies'])) { - $this->addDependencies($definition['config_dependencies']); - } - } - - // If a plugin is dependent, calculate its dependencies. - if ($instance instanceof DependentPluginInterface && $plugin_dependencies = $instance->calculateDependencies()) { - $this->addDependencies($plugin_dependencies); - } + $this->addDependencies($this->getPluginDependencies($instance)); } }