diff --git a/core/lib/Drupal/Core/Plugin/DefaultLazyPluginCollection.php b/core/lib/Drupal/Core/Plugin/DefaultLazyPluginCollection.php index 00392c3..61702a0 100644 --- a/core/lib/Drupal/Core/Plugin/DefaultLazyPluginCollection.php +++ b/core/lib/Drupal/Core/Plugin/DefaultLazyPluginCollection.php @@ -133,14 +133,18 @@ public function getConfiguration() { * {@inheritdoc} */ public function setConfiguration($configuration) { - $instance_ids = $this->getInstanceIds(); + // Track each instance ID as it is updated. + $unprocessed_instance_ids = $this->getInstanceIds(); + foreach ($configuration as $instance_id => $instance_configuration) { $this->setInstanceConfiguration($instance_id, $instance_configuration); - unset($instance_ids[$instance_id]); + // Remove this instance ID from the list being updated. + unset($unprocessed_instance_ids[$instance_id]); } - // Ensure that instances that are no longer configured are removed. - foreach ($instance_ids as $instance_id) { - $this->removeInstanceId($instance_id); + + // Remove remaining instances that had no configuration specified for them. + foreach ($unprocessed_instance_ids as $unprocessed_instance_id) { + $this->removeInstanceId($unprocessed_instance_id); } return $this; }