A decorated service should not keep the autowiring types
This commit is contained in:
parent
5a08a32f30
commit
5951378727
@ -54,9 +54,11 @@ class DecoratorServicePass implements CompilerPassInterface
|
||||
} 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);
|
||||
}
|
||||
|
||||
|
@ -142,6 +142,27 @@ class DecoratorServicePassTest extends \PHPUnit_Framework_TestCase
|
||||
$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();
|
||||
|
@ -360,8 +360,11 @@ class ResolveDefinitionTemplatesPassTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
$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)
|
||||
|
Reference in New Issue
Block a user