diff --git a/core/lib/Drupal/Core/Config/TypedConfigManager.php b/core/lib/Drupal/Core/Config/TypedConfigManager.php index 108bd8e..b4d454a 100644 --- a/core/lib/Drupal/Core/Config/TypedConfigManager.php +++ b/core/lib/Drupal/Core/Config/TypedConfigManager.php @@ -106,7 +106,11 @@ public function create(array $definition, $value = NULL, $name = NULL, $parent = // Create typed config object. $definition['name'] = $name; $definition['parent'] = $parent; - $wrapper = $this->createInstance($definition['type'], $definition); + $wrapper = $this->createInstance($definition['type'], array( + 'data_definition' => $definition, + 'name' => $name, + 'parent' => $parent, + )); if (isset($value)) { $wrapper->setValue($value, FALSE); } @@ -117,17 +121,20 @@ public function create(array $definition, $value = NULL, $name = NULL, $parent = * {@inheritdoc} */ public function createInstance($data_type, array $configuration = array()) { + $data_definition = $configuration['data_definition']; $type_definition = $this->getDefinition($data_type); + if (!isset($type_definition)) { throw new \InvalidArgumentException(String::format('Invalid data type %plugin_id has been given.', array('%plugin_id' => $data_type))); } - $configuration += $type_definition; // Allow per-data definition overrides of the used classes, i.e. take over - // classes specified in the data definition. - $key = empty($configuration['list']) ? 'class' : 'list class'; - if (isset($configuration[$key])) { - $class = $configuration[$key]; + // classes specified in the type definition. + $data_definition += $type_definition; + + $key = empty($data_definition['list']) ? 'class' : 'list class'; + if (isset($data_definition[$key])) { + $class = $data_definition[$key]; } elseif (isset($type_definition[$key])) { $class = $type_definition[$key]; @@ -136,7 +143,7 @@ public function createInstance($data_type, array $configuration = array()) { if (!isset($class)) { throw new PluginException(sprintf('The plugin (%s) did not specify an instance class.', $data_type)); } - return new $class($configuration, $configuration['name'], $configuration['parent']); + return new $class($data_definition, $configuration['name'], $configuration['parent']); } /**