diff core/lib/Drupal/Core/Plugin/PluginDependencyTrait.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 129ea1e6d783
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/lib/Drupal/Core/Plugin/PluginDependencyTrait.php	Wed Nov 29 16:09:58 2017 +0000
@@ -0,0 +1,52 @@
+<?php
+
+namespace Drupal\Core\Plugin;
+
+use Drupal\Component\Plugin\Definition\PluginDefinitionInterface;
+use Drupal\Component\Plugin\DependentPluginInterface;
+use Drupal\Component\Plugin\PluginInspectionInterface;
+use Drupal\Core\Entity\DependencyTrait;
+use Drupal\Core\Plugin\Definition\DependentPluginDefinitionInterface;
+
+/**
+ * Provides a trait for calculating the dependencies of a plugin.
+ */
+trait PluginDependencyTrait {
+
+  use DependencyTrait;
+
+  /**
+   * 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) {
+    $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);
+    }
+  }
+
+}