8000 A decorated service should not keep the autowiring types · symfony/symfony@963d0c5 · GitHub
[go: up one dir, main page]

Skip to content

Commit 963d0c5

Browse files
committed
A decorated service should not keep the autowiring types
1 parent 5a08a32 commit 963d0c5

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

src/Symfony/Component/DependencyInjection/Compiler/DecoratorServicePass.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,11 @@ public function process(ContainerBuilder $container)
5454
} else {
5555
$decoratedDefinition = $container->getDefinition($inner);
5656
$definition->setTags($decoratedDefinition->getTags(), $definition->getTags());
57+
$definition->setAutowiringTypes(array_merge($decoratedDefinition->getAutowiringTypes(), $definition->getAutowiringTypes()));
5758
$public = $decoratedDefinition->isPublic();
5859
$decoratedDefinition->setPublic(false);
5960
$decoratedDefinition->setTags(array());
61+
$decoratedDefinition->setAutowiringTypes(array());
6062
$container->setDefinition($renamedId, $decoratedDefinition);
6163
}
6264

src/Symfony/Component/DependencyInjection/Tests/Compiler/DecoratorServicePassTest.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,27 @@ public function testProcessMovesTagsFromDecoratedDefinitionToDecoratingDefinitio
142142
$this->assertEquals(array('name' => 'bar'), $container->getDefinition('baz')->getTags());
143143
}
144144

145+
public function testProcessMergesAutowiringTypesInDecoratingDefinitionAndRemoveThemFromDecoratedDefinition()
146+
{
147+
$container = new ContainerBuilder();
148+
149+
$container
150+
->register('parent')
151+
->addAutowiringType('Bar')
152+
;
153+
154+
$container
155+
->register('child')
156+
->setDecoratedService('parent')
157+
->addAutowiringType('Foo')
158+
;
159+
160+
$this->process($container);
161+
162+
$this->assertEquals(array('Bar', 'Foo'), $container->getDefinition('child')->getAutowiringTypes());
163+
$this->assertSame(array(), $container->getDefinition('child.inner')->getAutowiringTypes());
164+
}
165+
145166
protected function process(ContainerBuilder $container)
146167
{
147168
$repeatedPass = new DecoratorServicePass();

src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -360,8 +360,11 @@ public function testProcessMergeAutowiringTypes()
360360

361361
$this->process($container);
362362

363-
$def = $container->getDefinition('child');
364-
$this->assertEquals(array('Foo', 'Bar'), $def->getAutowiringTypes());
363+
$childDef = $container->getDefinition('child');
364+
$this->assertEquals(array('Foo', 'Bar'), $childDef->getAutowiringTypes());
365+
366+
$parentDef = $container->getDefinition('parent');
367+
$this->assertSame(array('Foo'), $parentDef->getAutowiringTypes());
365368
}
366369

367370
protected function process(ContainerBuilder $container)

0 commit comments

Comments
 (0)
0