diff --git a/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php b/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php index 027c59a..3437773 100644 --- a/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php +++ b/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php @@ -81,24 +81,31 @@ public function getDefinitions() { */ protected function getDerivatives(array $base_plugin_definitions) { $plugin_definitions = array(); + $derivative_plugin_definitions = array(); foreach ($base_plugin_definitions as $base_plugin_id => $plugin_definition) { $derivative_fetcher = $this->getDerivativeFetcher($base_plugin_id, $plugin_definition); if ($derivative_fetcher) { $derivative_definitions = $derivative_fetcher->getDerivativeDefinitions($plugin_definition); foreach ($derivative_definitions as $derivative_id => $derivative_definition) { $plugin_id = $this->encodePluginId($base_plugin_id, $derivative_id); - // Use this definition as defaults if a plugin already defined - // itself as this derivative. - if ($derivative_id && isset($base_plugin_definitions[$plugin_id])) { - $derivative_definition = $base_plugin_definitions[$plugin_id] + ($derivative_definition ?: array()); - } $plugin_definitions[$plugin_id] = $derivative_definition; } } - // If a plugin already defined itself as a derivative it might already - // be merged into the definitions. - elseif (!isset($plugin_definitions[$base_plugin_id])) { - $plugin_definitions[$base_plugin_id] = $plugin_definition; + else { + list(, $derivative_id) = $this->decodePluginId($base_plugin_id); + if ($derivative_id) { + $derivative_plugin_definitions[$base_plugin_id] = $plugin_definition; + } + else { + $plugin_definitions[$base_plugin_id] = $plugin_definition; + } + } + } + foreach ($derivative_plugin_definitions as $plugin_id => $plugin_definition) { + if (isset($plugin_definitions[$plugin_id])) { + // Use this definition as defaults if a plugin already defined + // itself as this derivative. + $plugin_definitions[$plugin_id] = $plugin_definition + $plugin_definitions[$plugin_id]; } } diff --git a/core/lib/Drupal/Core/Extension/ModuleHandler.php b/core/lib/Drupal/Core/Extension/ModuleHandler.php index cbfd882..001e278 100644 --- a/core/lib/Drupal/Core/Extension/ModuleHandler.php +++ b/core/lib/Drupal/Core/Extension/ModuleHandler.php @@ -611,7 +611,6 @@ public function install(array $module_list, $enable_dependencies = TRUE) { // @todo install_begin_request() creates a container without a kernel. if ($kernel = \Drupal::service('kernel', ContainerInterface::NULL_ON_INVALID_REFERENCE)) { $kernel->updateModules($module_filenames, $module_filenames); - \Drupal::moduleHandler()->loadAll(); } // Refresh the schema to include it.