Version 1
[yaffs-website] / web / core / lib / Drupal / Core / Plugin / Discovery / ContainerDerivativeDiscoveryDecorator.php
diff --git a/web/core/lib/Drupal/Core/Plugin/Discovery/ContainerDerivativeDiscoveryDecorator.php b/web/core/lib/Drupal/Core/Plugin/Discovery/ContainerDerivativeDiscoveryDecorator.php
new file mode 100644 (file)
index 0000000..017348e
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+namespace Drupal\Core\Plugin\Discovery;
+
+use Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator;
+
+class ContainerDerivativeDiscoveryDecorator extends DerivativeDiscoveryDecorator {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getDeriver($base_plugin_id, $base_definition) {
+    if (!isset($this->derivers[$base_plugin_id])) {
+      $this->derivers[$base_plugin_id] = FALSE;
+      $class = $this->getDeriverClass($base_definition);
+      if ($class) {
+        // If the deriver provides a factory method, pass the container to it.
+        if (is_subclass_of($class, '\Drupal\Core\Plugin\Discovery\ContainerDeriverInterface')) {
+          /** @var \Drupal\Core\Plugin\Discovery\ContainerDeriverInterface $class */
+          $this->derivers[$base_plugin_id] = $class::create(\Drupal::getContainer(), $base_plugin_id);
+        }
+        else {
+          $this->derivers[$base_plugin_id] = new $class($base_plugin_id);
+        }
+      }
+    }
+    return $this->derivers[$base_plugin_id] ?: NULL;
+  }
+
+}