From d3a4a770a65b295387ba35185a0e4dd3660eedd2 Mon Sep 17 00:00:00 2001 From: Christian Wahler Date: Wed, 9 Dec 2015 16:36:18 +0100 Subject: [PATCH] [DependencyInjection] fixed definition loosing property shared when decorated by a parent definition --- .../ResolveDefinitionTemplatesPass.php | 1 + .../ResolveDefinitionTemplatesPassTest.php | 38 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ResolveDefinitionTemplatesPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ResolveDefinitionTemplatesPass.php index 62ed326b4b..e654819c0e 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/ResolveDefinitionTemplatesPass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/ResolveDefinitionTemplatesPass.php @@ -211,6 +211,7 @@ class ResolveDefinitionTemplatesPass implements CompilerPassInterface // these attributes are always taken from the child $def->setAbstract($definition->isAbstract()); $def->setScope($definition->getScope(false), false); + $def->setShared($definition->isShared()); $def->setTags($definition->getTags()); return $def; diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php index c1fff28b60..15de79042c 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php @@ -101,6 +101,25 @@ class ResolveDefinitionTemplatesPassTest extends \PHPUnit_Framework_TestCase $this->assertEquals(ContainerInterface::SCOPE_CONTAINER, $def->getScope()); } + public function testProcessDoesNotCopyShared() + { + $container = new ContainerBuilder(); + + $container + ->register('parent') + ->setShared(false) + ; + + $container + ->setDefinition('child', new DefinitionDecorator('parent')) + ; + + $this->process($container); + + $def = $container->getDefinition('child'); + $this->assertTrue($def->isShared()); + } + public function testProcessDoesNotCopyTags() { $container = new ContainerBuilder(); @@ -139,6 +158,25 @@ class ResolveDefinitionTemplatesPassTest extends \PHPUnit_Framework_TestCase $this->assertNull($def->getDecoratedService()); } + public function testProcessDoesNotDropShared() + { + $container = new ContainerBuilder(); + + $container + ->register('parent') + ; + + $container + ->setDefinition('child', new DefinitionDecorator('parent')) + ->setShared(false) + ; + + $this->process($container); + + $def = $container->getDefinition('child'); + $this->assertFalse($def->isShared()); + } + public function testProcessHandlesMultipleInheritance() { $container = new ContainerBuilder();