diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ResolveInstanceofConditionalsPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ResolveInstanceofConditionalsPass.php index 02021c8bc5e6e..0b56476c69ebe 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/ResolveInstanceofConditionalsPass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/ResolveInstanceofConditionalsPass.php @@ -113,14 +113,17 @@ private function processDefinition(ContainerBuilder $container, $id, Definition $definition->setShared($shared); } - $i = \count($instanceofTags); - while (0 <= --$i) { - foreach ($instanceofTags[$i] as $k => $v) { - foreach ($v as $v) { - if ($definition->hasTag($k) && \in_array($v, $definition->getTag($k))) { - continue; + // Don't add tags to service decorators + if (null === $definition->getDecoratedService()) { + $i = \count($instanceofTags); + while (0 <= --$i) { + foreach ($instanceofTags[$i] as $k => $v) { + foreach ($v as $v) { + if ($definition->hasTag($k) && \in_array($v, $definition->getTag($k))) { + continue; + } + $definition->addTag($k, $v); } - $definition->addTag($k, $v); } } } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveInstanceofConditionalsPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveInstanceofConditionalsPassTest.php index 88cc88b9dc293..7fee5194f08a4 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveInstanceofConditionalsPassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveInstanceofConditionalsPassTest.php @@ -307,4 +307,26 @@ public function testBindingsOnInstanceofConditionals() $this->assertInstanceOf(BoundArgument::class, $bindings['$toto']); $this->assertSame(123, $bindings['$toto']->getValues()[0]); } + + public function testDecoratorsAreNotAutomaticallyTagged() + { + $container = new ContainerBuilder(); + + $decorator = $container->register('decorator', self::class); + $decorator->setDecoratedService('decorated'); + $decorator->setInstanceofConditionals([ + parent::class => (new ChildDefinition(''))->addTag('tag'), + ]); + $decorator->setAutoconfigured(true); + $decorator->addTag('manual'); + + $container->registerForAutoconfiguration(parent::class) + ->addTag('tag') + ; + + (new ResolveInstanceofConditionalsPass())->process($container); + (new ResolveChildDefinitionsPass())->process($container); + + $this->assertSame(['manual' => [[]]], $container->getDefinition('decorator')->getTags()); + } } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy