Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / lib / Drupal / Core / Plugin / PluginDependencyTrait.php
index b9dd9e659d61ffa2e917b82400e317d75e4c9e74..02f7c0242833047f809f8f686071ddcba444fb53 100644 (file)
@@ -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));
   }
 
 }