A decorated service should not keep the autowiring types

This commit is contained in:
Robin Chalas 2016-10-21 20:02:07 +02:00
parent 5a08a32f30
commit 5951378727
No known key found for this signature in database
GPG Key ID: 89672113756EE03B
3 changed files with 28 additions and 2 deletions

View File

@ -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);
}

View File

@ -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();

View File

@ -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)