Skip to content

Commit cc3812c

Browse files
Merge branch '4.3' into 4.4
* 4.3: [HttpClient] Don't read from the network faster than the CPU can deal with [DI] DecoratorServicePass should keep container.service_locator on the decorated definition
2 parents e2735aa + 25eff06 commit cc3812c

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

Compiler/DecoratorServicePass.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,18 @@ public function process(ContainerBuilder $container)
7878

7979
if (isset($decoratingDefinitions[$inner])) {
8080
$decoratingDefinition = $decoratingDefinitions[$inner];
81-
$definition->setTags(array_merge($decoratingDefinition->getTags(), $definition->getTags()));
82-
$decoratingDefinition->setTags([]);
81+
82+
$decoratingTags = $decoratingDefinition->getTags();
83+
$resetTags = [];
84+
85+
if (isset($decoratingTags['container.service_locator'])) {
86+
// container.service_locator has special logic and it must not be transferred out to decorators
87+
$resetTags = ['container.service_locator' => $decoratingTags['container.service_locator']];
88+
unset($decoratingTags['container.service_locator']);
89+
}
90+
91+
$definition->setTags(array_merge($decoratingTags, $definition->getTags()));
92+
$decoratingDefinition->setTags($resetTags);
8393
$decoratingDefinitions[$inner] = $definition;
8494
}
8595

Tests/Compiler/DecoratorServicePassTest.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,25 @@ public function testProcessMovesTagsFromDecoratedDefinitionToDecoratingDefinitio
223223
$this->assertEquals(['bar' => ['attr' => 'baz']], $container->getDefinition('deco2')->getTags());
224224
}
225225

226+
public function testProcessLeavesServiceLocatorTagOnOriginalDefinition()
227+
{
228+
$container = new ContainerBuilder();
229+
$container
230+
->register('foo')
231+
->setTags(['container.service_locator' => [0 => []], 'bar' => ['attr' => 'baz']])
232+
;
233+
$container
234+
->register('baz')
235+
->setTags(['foobar' => ['attr' => 'bar']])
236+
->setDecoratedService('foo')
237+
;
238+
239+
$this->process($container);
240+
241+
$this->assertEquals(['container.service_locator' => [0 => []]], $container->getDefinition('baz.inner')->getTags());
242+
$this->assertEquals(['bar' => ['attr' => 'baz'], 'foobar' => ['attr' => 'bar']], $container->getDefinition('baz')->getTags());
243+
}
244+
226245
protected function process(ContainerBuilder $container)
227246
{
228247
$repeatedPass = new DecoratorServicePass();

0 commit comments

Comments
 (0)