Skip to content

Commit b4f3a4b

Browse files
Merge branch '5.4' into 6.0
* 5.4: [Messenger] Use :memory: for SQLite tests [Mailer] Stream timeout not detected due to checking only string result of function fgets don not set http_version instead of setting it to null [DependencyInjection] don't move locator tag for service subscriber Fix search scope when performing fallback mapping driver detection Fix the notification email theme for asynchronously dispatched emails Update the CI setup to use the new output file Update actions in the CI to move away from the deprecated runtime Use 6.3 for new features [HttpFoundation] Check IPv6 is valid before comparing it Run tests with UTC to avoid daylight saving time messing with assertions Bump Symfony version to 5.4.16 Update VERSION for 5.4.15 Update CHANGELOG for 5.4.15 Bump Symfony version to 4.4.49 Update VERSION for 4.4.48 Update CONTRIBUTORS for 4.4.48 Update CHANGELOG for 4.4.48 [DependencyInjection] Don't autoconfigure tag when it's already set with attributes
2 parents 6339881 + c7b217e commit b4f3a4b

File tree

4 files changed

+37
-5
lines changed

4 files changed

+37
-5
lines changed

Compiler/DecoratorServicePass.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public function process(ContainerBuilder $container)
4242

4343
$tagsToKeep = $container->hasParameter('container.behavior_describing_tags')
4444
? $container->getParameter('container.behavior_describing_tags')
45-
: ['container.do_not_inline', 'container.service_locator', 'container.service_subscriber'];
45+
: ['container.do_not_inline', 'container.service_locator', 'container.service_subscriber', 'container.service_subscriber.locator'];
4646

4747
foreach ($definitions as [$id, $definition]) {
4848
$decoratedService = $definition->getDecoratedService();

Compiler/ResolveInstanceofConditionalsPass.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ private function processDefinition(ContainerBuilder $container, string $id, Defi
129129
foreach ($instanceofTags[$i] as $k => $v) {
130130
if (null === $definition->getDecoratedService() || \in_array($k, $tagsToKeep, true)) {
131131
foreach ($v as $v) {
132-
if ($definition->hasTag($k) && \in_array($v, $definition->getTag($k))) {
132+
if ($definition->hasTag($k) && (!$v || \in_array($v, $definition->getTag($k)))) {
133133
continue;
134134
}
135135
$definition->addTag($k, $v);

Tests/Compiler/DecoratorServicePassTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ public function testProcessLeavesServiceSubscriberTagOnOriginalDefinition()
248248
$container = new ContainerBuilder();
249249
$container
250250
->register('foo')
251-
->setTags(['container.service_subscriber' => [], 'bar' => ['attr' => 'baz']])
251+
->setTags(['container.service_subscriber' => [], 'container.service_subscriber.locator' => [], 'bar' => ['attr' => 'baz']])
252252
;
253253
$container
254254
->register('baz')
@@ -258,7 +258,7 @@ public function testProcessLeavesServiceSubscriberTagOnOriginalDefinition()
258258

259259
$this->process($container);
260260

261-
$this->assertEquals(['container.service_subscriber' => []], $container->getDefinition('baz.inner')->getTags());
261+
$this->assertEquals(['container.service_subscriber' => [], 'container.service_subscriber.locator' => []], $container->getDefinition('baz.inner')->getTags());
262262
$this->assertEquals(['bar' => ['attr' => 'baz'], 'foobar' => ['attr' => 'bar']], $container->getDefinition('baz')->getTags());
263263
}
264264

Tests/Compiler/IntegrationTest.php

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Component\DependencyInjection\Tests\Compiler;
1313

1414
use PHPUnit\Framework\TestCase;
15+
use Psr\Container\ContainerInterface;
1516
use Symfony\Component\Config\FileLocator;
1617
use Symfony\Component\DependencyInjection\Alias;
1718
use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
@@ -148,19 +149,41 @@ public function testProcessInlinesWhenThereAreMultipleReferencesButFromTheSameDe
148149
$this->assertFalse($container->hasDefinition('c'), 'Service C was not inlined.');
149150
}
150151

151-
public function testCanDecorateServiceSubscriber()
152+
public function testCanDecorateServiceSubscriberUsingBinding()
152153
{
153154
$container = new ContainerBuilder();
154155
$container->register(ServiceSubscriberStub::class)
155156
->addTag('container.service_subscriber')
156157
->setPublic(true);
157158

158159
$container->register(DecoratedServiceSubscriber::class)
160+
->setProperty('inner', new Reference(DecoratedServiceSubscriber::class.'.inner'))
159161
->setDecoratedService(ServiceSubscriberStub::class);
160162

161163
$container->compile();
162164

163165
$this->assertInstanceOf(DecoratedServiceSubscriber::class, $container->get(ServiceSubscriberStub::class));
166+
$this->assertInstanceOf(ServiceSubscriberStub::class, $container->get(ServiceSubscriberStub::class)->inner);
167+
$this->assertInstanceOf(ServiceLocator::class, $container->get(ServiceSubscriberStub::class)->inner->container);
168+
}
169+
170+
public function testCanDecorateServiceSubscriberReplacingArgument()
171+
{
172+
$container = new ContainerBuilder();
173+
$container->register(ServiceSubscriberStub::class)
174+
->setArguments([new Reference(ContainerInterface::class)])
175+
->addTag('container.service_subscriber')
176+
->setPublic(true);
177+
178+
$container->register(DecoratedServiceSubscriber::class)
179+
->setProperty('inner', new Reference(DecoratedServiceSubscriber::class.'.inner'))
180+
->setDecoratedService(ServiceSubscriberStub::class);
181+
182+
$container->compile();
183+
184+
$this->assertInstanceOf(DecoratedServiceSubscriber::class, $container->get(ServiceSubscriberStub::class));
185+
$this->assertInstanceOf(ServiceSubscriberStub::class, $container->get(ServiceSubscriberStub::class)->inner);
186+
$this->assertInstanceOf(ServiceLocator::class, $container->get(ServiceSubscriberStub::class)->inner->container);
164187
}
165188

166189
public function testCanDecorateServiceLocator()
@@ -824,6 +847,7 @@ static function (ChildDefinition $definition, CustomAutoconfiguration $attribute
824847
$definition->addTag('app.custom_tag', get_object_vars($attribute) + ['class' => $reflector->getName()]);
825848
}
826849
);
850+
$container->registerForAutoconfiguration(TaggedService1::class)->addTag('app.custom_tag');
827851

828852
$container->register('one', TaggedService1::class)
829853
->setPublic(true)
@@ -1003,6 +1027,13 @@ static function (ChildDefinition $definition) {
10031027

10041028
class ServiceSubscriberStub implements ServiceSubscriberInterface
10051029
{
1030+
public $container;
1031+
1032+
public function __construct(ContainerInterface $container)
1033+
{
1034+
$this->container = $container;
1035+
}
1036+
10061037
public static function getSubscribedServices(): array
10071038
{
10081039
return [];
@@ -1011,6 +1042,7 @@ public static function getSubscribedServices(): array
10111042

10121043
class DecoratedServiceSubscriber
10131044
{
1045+
public $inner;
10141046
}
10151047

10161048
class DecoratedServiceLocator implements ServiceProviderInterface

0 commit comments

Comments
 (0)