[DI] Support deprecated definitions in decorators
This commit is contained in:
parent
0b3d0a0bd9
commit
83f4e9cf45
@ -127,6 +127,9 @@ class ResolveDefinitionTemplatesPass implements CompilerPassInterface
|
|||||||
if ($parentDef->getFactoryService(false)) {
|
if ($parentDef->getFactoryService(false)) {
|
||||||
$def->setFactoryService($parentDef->getFactoryService(false));
|
$def->setFactoryService($parentDef->getFactoryService(false));
|
||||||
}
|
}
|
||||||
|
if ($parentDef->isDeprecated()) {
|
||||||
|
$def->setDeprecated(true, $parentDef->getDeprecationMessage('%service_id%'));
|
||||||
|
}
|
||||||
$def->setFactory($parentDef->getFactory());
|
$def->setFactory($parentDef->getFactory());
|
||||||
$def->setConfigurator($parentDef->getConfigurator());
|
$def->setConfigurator($parentDef->getConfigurator());
|
||||||
$def->setFile($parentDef->getFile());
|
$def->setFile($parentDef->getFile());
|
||||||
@ -162,6 +165,9 @@ class ResolveDefinitionTemplatesPass implements CompilerPassInterface
|
|||||||
if (isset($changes['lazy'])) {
|
if (isset($changes['lazy'])) {
|
||||||
$def->setLazy($definition->isLazy());
|
$def->setLazy($definition->isLazy());
|
||||||
}
|
}
|
||||||
|
if (isset($changes['deprecated'])) {
|
||||||
|
$def->setDeprecated($definition->isDeprecated(), $definition->getDeprecationMessage('%service_id%'));
|
||||||
|
}
|
||||||
if (isset($changes['decorated_service'])) {
|
if (isset($changes['decorated_service'])) {
|
||||||
$decoratedService = $definition->getDecoratedService();
|
$decoratedService = $definition->getDecoratedService();
|
||||||
if (null === $decoratedService) {
|
if (null === $decoratedService) {
|
||||||
|
@ -180,6 +180,16 @@ class DefinitionDecorator extends Definition
|
|||||||
return parent::setDecoratedService($id, $renamedId, $priority);
|
return parent::setDecoratedService($id, $renamedId, $priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function setDeprecated($boolean = true, $template = null)
|
||||||
|
{
|
||||||
|
$this->changes['deprecated'] = true;
|
||||||
|
|
||||||
|
return parent::setDeprecated($boolean, $template);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets an argument to pass to the service constructor/factory method.
|
* Gets an argument to pass to the service constructor/factory method.
|
||||||
*
|
*
|
||||||
|
@ -244,6 +244,36 @@ class ResolveDefinitionTemplatesPassTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals(array('foo', 'foo_inner', 0), $container->getDefinition('child1')->getDecoratedService());
|
$this->assertEquals(array('foo', 'foo_inner', 0), $container->getDefinition('child1')->getDecoratedService());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testDecoratedServiceCopiesDeprecatedStatusFromParent()
|
||||||
|
{
|
||||||
|
$container = new ContainerBuilder();
|
||||||
|
$container->register('deprecated_parent')
|
||||||
|
->setDeprecated(true)
|
||||||
|
;
|
||||||
|
|
||||||
|
$container->setDefinition('decorated_deprecated_parent', new DefinitionDecorator('deprecated_parent'));
|
||||||
|
|
||||||
|
$this->process($container);
|
||||||
|
|
||||||
|
$this->assertTrue($container->getDefinition('decorated_deprecated_parent')->isDeprecated());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDecoratedServiceCanOverwriteDeprecatedParentStatus()
|
||||||
|
{
|
||||||
|
$container = new ContainerBuilder();
|
||||||
|
$container->register('deprecated_parent')
|
||||||
|
->setDeprecated(true)
|
||||||
|
;
|
||||||
|
|
||||||
|
$container->setDefinition('decorated_deprecated_parent', new DefinitionDecorator('deprecated_parent'))
|
||||||
|
->setDeprecated(false)
|
||||||
|
;
|
||||||
|
|
||||||
|
$this->process($container);
|
||||||
|
|
||||||
|
$this->assertFalse($container->getDefinition('decorated_deprecated_parent')->isDeprecated());
|
||||||
|
}
|
||||||
|
|
||||||
protected function process(ContainerBuilder $container)
|
protected function process(ContainerBuilder $container)
|
||||||
{
|
{
|
||||||
$pass = new ResolveDefinitionTemplatesPass();
|
$pass = new ResolveDefinitionTemplatesPass();
|
||||||
|
Reference in New Issue
Block a user