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));
   }
 
 }