3 namespace Drupal\Core\Plugin\Discovery;
5 use Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator;
7 class ContainerDerivativeDiscoveryDecorator extends DerivativeDiscoveryDecorator {
12 protected function getDeriver($base_plugin_id, $base_definition) {
13 if (!isset($this->derivers[$base_plugin_id])) {
14 $this->derivers[$base_plugin_id] = FALSE;
15 $class = $this->getDeriverClass($base_definition);
17 // If the deriver provides a factory method, pass the container to it.
18 if (is_subclass_of($class, '\Drupal\Core\Plugin\Discovery\ContainerDeriverInterface')) {
19 /** @var \Drupal\Core\Plugin\Discovery\ContainerDeriverInterface $class */
20 $this->derivers[$base_plugin_id] = $class::create(\Drupal::getContainer(), $base_plugin_id);
23 $this->derivers[$base_plugin_id] = new $class($base_plugin_id);
27 return $this->derivers[$base_plugin_id] ?: NULL;