diff --git a/src/Symfony/Component/DependencyInjection/Compiler/DecoratorServicePass.php b/src/Symfony/Component/DependencyInjection/Compiler/DecoratorServicePass.php index 285beda21cb00..391357a1fa3ac 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/DecoratorServicePass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/DecoratorServicePass.php @@ -54,9 +54,11 @@ public function process(ContainerBuilder $container) } else { $decoratedDefinition = $container->getDefinition($inner); $definition->setTags($decoratedDefinition->getTags(), $definition->getTags()); + $definition->setAutowiringTypes(array_merge($decoratedDefinition->getAutowiringTypes(), $definition->getAutowiringTypes())); $public = $decoratedDefinition->isPublic(); $decoratedDefinition->setPublic(false); $decoratedDefinition->setTags(array()); + $decoratedDefinition->setAutowiringTypes(array()); $container->setDefinition($renamedId, $decoratedDefinition); } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/DecoratorServicePassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/DecoratorServicePassTest.php index a8b741e568d98..8459298268e9b 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/DecoratorServicePassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/DecoratorServicePassTest.php @@ -142,6 +142,27 @@ public function testProcessMovesTagsFromDecoratedDefinitionToDecoratingDefinitio $this->assertEquals(array('name' => 'bar'), $container->getDefinition('baz')->getTags()); } + public function testProcessMergesAutowiringTypesInDecoratingDefinitionAndRemoveThemFromDecoratedDefinition() + { + $container = new ContainerBuilder(); + + $container + ->register('parent') + ->addAutowiringType('Bar') + ; + + $container + ->register('child') + ->setDecoratedService('parent') + ->addAutowiringType('Foo') + ; + + $this->process($container); + + $this->assertEquals(array('Bar', 'Foo'), $container->getDefinition('child')->getAutowiringTypes()); + $this->assertEmpty($container->getDefinition('child.inner')->getAutowiringTypes()); + } + protected function process(ContainerBuilder $container) { $repeatedPass = new DecoratorServicePass(); diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php index dd23e162cd52b..15392fbdc18cb 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php @@ -360,8 +360,11 @@ public function testProcessMergeAutowiringTypes() $this->process($container); - $def = $container->getDefinition('child'); - $this->assertEquals(array('Foo', 'Bar'), $def->getAutowiringTypes()); + $childDef = $container->getDefinition('child'); + $this->assertEquals(array('Foo', 'Bar'), $childDef->getAutowiringTypes()); + + $parentDef = $container->getDefinition('parent'); + $this->assertSame(array('Foo'), $parentDef->getAutowiringTypes()); } protected function process(ContainerBuilder $container)