namespace Symfony\Component\DependencyInjection\Compiler;
-use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Alias;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
/**
* Overwrites a service but keeps the overridden one.
}
$definitions->insert(array($id, $definition), array($decorated[2], --$order));
}
+ $decoratingDefinitions = array();
foreach ($definitions as list($id, $definition)) {
list($inner, $renamedId) = $definition->getDecoratedService();
$container->setAlias($renamedId, new Alias($container->normalizeId($alias), false));
} else {
$decoratedDefinition = $container->getDefinition($inner);
- $definition->setTags(array_merge($decoratedDefinition->getTags(), $definition->getTags()));
- if ($types = array_merge($decoratedDefinition->getAutowiringTypes(false), $definition->getAutowiringTypes(false))) {
- $definition->setAutowiringTypes($types);
- }
$public = $decoratedDefinition->isPublic();
$private = $decoratedDefinition->isPrivate();
$decoratedDefinition->setPublic(false);
- $decoratedDefinition->setTags(array());
- if ($decoratedDefinition->getAutowiringTypes(false)) {
- $decoratedDefinition->setAutowiringTypes(array());
- }
$container->setDefinition($renamedId, $decoratedDefinition);
+ $decoratingDefinitions[$inner] = $decoratedDefinition;
+ }
+
+ if (isset($decoratingDefinitions[$inner])) {
+ $decoratingDefinition = $decoratingDefinitions[$inner];
+ $definition->setTags(array_merge($decoratingDefinition->getTags(), $definition->getTags()));
+ $autowiringTypes = $decoratingDefinition->getAutowiringTypes(false);
+ if ($types = array_merge($autowiringTypes, $definition->getAutowiringTypes(false))) {
+ $definition->setAutowiringTypes($types);
+ }
+ $decoratingDefinition->setTags(array());
+ if ($autowiringTypes) {
+ $decoratingDefinition->setAutowiringTypes(array());
+ }
+ $decoratingDefinitions[$inner] = $definition;
}
$container->setAlias($inner, $id)->setPublic($public)->setPrivate($private);