From 05ecf829fe52315c7e641f605167133c3a9b98f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Fri, 1 Mar 2019 10:40:47 +0100 Subject: [PATCH] Autoconfig: don't automatically tag decorators --- .../ResolveInstanceofConditionalsPass.php | 17 ++++++++------ .../ResolveInstanceofConditionalsPassTest.php | 22 +++++++++++++++++++ 2 files changed, 32 insertions(+), 7 deletions(-) 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