Skip to content

Commit afba76d

Browse files
author
Robin Chalas
committed
[Messenger] Restore message handlers laziness
1 parent bdbfca3 commit afba76d

File tree

2 files changed

+16
-24
lines changed

2 files changed

+16
-24
lines changed

DependencyInjection/MessengerPass.php

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
namespace Symfony\Component\Messenger\DependencyInjection;
1313

1414
use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
15-
use Symfony\Component\DependencyInjection\Argument\RewindableGenerator;
1615
use Symfony\Component\DependencyInjection\ChildDefinition;
1716
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
1817
use Symfony\Component\DependencyInjection\Compiler\ServiceLocatorTagPass;
@@ -163,11 +162,7 @@ private function registerHandlers(ContainerBuilder $container, array $busIds)
163162
foreach ($handlersByBusAndMessage as $bus => $handlersByMessage) {
164163
foreach ($handlersByMessage as $message => $handlerIds) {
165164
$handlers = array_map(function (string $handlerId) { return new Reference($handlerId); }, $handlerIds);
166-
$handlersId = "messenger.handlers.$bus.$message";
167-
$definitions[$handlersId] = (new Definition(RewindableGenerator::class))
168-
->setFactory('current')
169-
->addArgument(array($handlers));
170-
$handlersLocatorMappingByBus[$bus][$message] = new Reference($handlersId);
165+
$handlersLocatorMappingByBus[$bus][$message] = new IteratorArgument($handlers);
171166
}
172167
}
173168
$container->addDefinitions($definitions);

Tests/DependencyInjection/MessengerPassTest.php

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
namespace Symfony\Component\Messenger\Tests\DependencyInjection;
1313

1414
use PHPUnit\Framework\TestCase;
15-
use Symfony\Component\DependencyInjection\Argument\RewindableGenerator;
15+
use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
1616
use Symfony\Component\DependencyInjection\Compiler\ResolveChildDefinitionsPass;
1717
use Symfony\Component\DependencyInjection\Compiler\ResolveClassPass;
1818
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -67,8 +67,8 @@ public function testProcess()
6767
$this->assertSame(HandlersLocator::class, $handlersLocatorDefinition->getClass());
6868
$this->assertEquals(
6969
array(
70-
DummyMessage::class => new Reference("messenger.handlers.$busId.".DummyMessage::class),
71-
SecondMessage::class => new Reference("messenger.handlers.$busId.".SecondMessage::class),
70+
DummyMessage::class => new IteratorArgument(array(new Reference(DummyHandler::class))),
71+
SecondMessage::class => new IteratorArgument(array(new Reference(MissingArgumentTypeHandler::class))),
7272
),
7373
$handlersLocatorDefinition->getArgument(0)
7474
);
@@ -107,8 +107,8 @@ public function testProcessHandlersByBus()
107107
$this->assertSame(HandlersLocator::class, $commandBusHandlersLocatorDefinition->getClass());
108108
$this->assertEquals(
109109
array(
110-
MultipleBusesMessage::class => new Reference("messenger.handlers.$commandBusId.".MultipleBusesMessage::class),
111-
DummyCommand::class => new Reference("messenger.handlers.$commandBusId.".DummyCommand::class),
110+
MultipleBusesMessage::class => new IteratorArgument(array(new Reference(MultipleBusesMessageHandler::class))),
111+
DummyCommand::class => new IteratorArgument(array(new Reference(DummyCommandHandler::class))),
112112
),
113113
$commandBusHandlersLocatorDefinition->getArgument(0)
114114
);
@@ -117,8 +117,8 @@ public function testProcessHandlersByBus()
117117
$this->assertSame(HandlersLocator::class, $queryBusHandlersLocatorDefinition->getClass());
118118
$this->assertEquals(
119119
array(
120-
DummyQuery::class => new Reference("messenger.handlers.$queryBusId.".DummyQuery::class),
121-
MultipleBusesMessage::class => new Reference("messenger.handlers.$queryBusId.".MultipleBusesMessage::class),
120+
DummyQuery::class => new IteratorArgument(array(new Reference(DummyQueryHandler::class))),
121+
MultipleBusesMessage::class => new IteratorArgument(array(new Reference(MultipleBusesMessageHandler::class))),
122122
),
123123
$queryBusHandlersLocatorDefinition->getArgument(0)
124124
);
@@ -155,13 +155,10 @@ public function testGetClassesFromTheHandlerSubscriberInterface()
155155
$handlersMapping = $container->getDefinition($busId.'.messenger.handlers_locator')->getArgument(0);
156156

157157
$this->assertArrayHasKey(DummyMessage::class, $handlersMapping);
158-
$this->assertEquals(new Reference("messenger.handlers.$busId.".DummyMessage::class), $handlersMapping[DummyMessage::class]);
158+
$this->assertEquals(new IteratorArgument(array(new Reference(HandlerWithMultipleMessages::class))), $handlersMapping[DummyMessage::class]);
159159

160160
$this->assertArrayHasKey(SecondMessage::class, $handlersMapping);
161-
$handlersDefinition = $container->getDefinition($handlersMapping[SecondMessage::class]);
162-
163-
$this->assertSame(RewindableGenerator::class, $handlersDefinition->getClass());
164-
$this->assertEquals(array(new Reference(PrioritizedHandler::class), new Reference(HandlerWithMultipleMessages::class)), $handlersDefinition->getArgument(0)[0]);
161+
$this->assertEquals(new IteratorArgument(array(new Reference(PrioritizedHandler::class), new Reference(HandlerWithMultipleMessages::class))), $handlersMapping[SecondMessage::class]);
165162
}
166163

167164
public function testGetClassesAndMethodsAndPrioritiesFromTheSubscriber()
@@ -183,13 +180,13 @@ public function testGetClassesAndMethodsAndPrioritiesFromTheSubscriber()
183180
$this->assertArrayHasKey(DummyMessage::class, $handlersMapping);
184181
$this->assertArrayHasKey(SecondMessage::class, $handlersMapping);
185182

186-
$dummyHandlerReference = $container->getDefinition($handlersMapping[DummyMessage::class])->getArgument(0)[0][0];
183+
$dummyHandlerReference = $handlersMapping[DummyMessage::class]->getValues()[0];
187184
$dummyHandlerDefinition = $container->getDefinition($dummyHandlerReference);
188185
$this->assertSame('callable', $dummyHandlerDefinition->getClass());
189186
$this->assertEquals(array(new Reference(HandlerMappingMethods::class), 'dummyMethod'), $dummyHandlerDefinition->getArgument(0));
190187
$this->assertSame(array('Closure', 'fromCallable'), $dummyHandlerDefinition->getFactory());
191188

192-
$secondHandlerReference = $container->getDefinition($handlersMapping[SecondMessage::class])->getArgument(0)[0][1];
189+
$secondHandlerReference = $handlersMapping[SecondMessage::class]->getValues()[1];
193190
$secondHandlerDefinition = $container->getDefinition($secondHandlerReference);
194191
$this->assertSame(PrioritizedHandler::class, $secondHandlerDefinition->getClass());
195192
}
@@ -281,11 +278,11 @@ public function testItShouldNotThrowIfGeneratorIsReturnedInsteadOfArray()
281278
$handlersMapping = $container->getDefinition($busId.'.messenger.handlers_locator')->getArgument(0);
282279

283280
$this->assertArrayHasKey(DummyMessage::class, $handlersMapping);
284-
$firstReference = $container->getDefinition($handlersMapping[DummyMessage::class])->getArgument(0)[0][0];
281+
$firstReference = $handlersMapping[DummyMessage::class]->getValues()[0];
285282
$this->assertEquals(array(new Reference(HandlerWithGenerators::class), 'dummyMethod'), $container->getDefinition($firstReference)->getArgument(0));
286283

287284
$this->assertArrayHasKey(SecondMessage::class, $handlersMapping);
288-
$secondReference = $container->getDefinition($handlersMapping[SecondMessage::class])->getArgument(0)[0][0];
285+
$secondReference = $handlersMapping[SecondMessage::class]->getValues()[0];
289286
$this->assertEquals(array(new Reference(HandlerWithGenerators::class), 'secondMessage'), $container->getDefinition($secondReference)->getArgument(0));
290287
}
291288

@@ -304,13 +301,13 @@ public function testItRegistersHandlersOnDifferentBuses()
304301
$eventsHandlerMapping = $container->getDefinition($eventsBusId.'.messenger.handlers_locator')->getArgument(0);
305302

306303
$this->assertEquals(array(DummyMessage::class), array_keys($eventsHandlerMapping));
307-
$firstReference = $container->getDefinition($eventsHandlerMapping[DummyMessage::class])->getArgument(0)[0][0];
304+
$firstReference = $eventsHandlerMapping[DummyMessage::class]->getValues()[0];
308305
$this->assertEquals(array(new Reference(HandlerOnSpecificBuses::class), 'dummyMethodForEvents'), $container->getDefinition($firstReference)->getArgument(0));
309306

310307
$commandsHandlerMapping = $container->getDefinition($commandsBusId.'.messenger.handlers_locator')->getArgument(0);
311308

312309
$this->assertEquals(array(DummyMessage::class), array_keys($commandsHandlerMapping));
313-
$firstReference = $container->getDefinition($commandsHandlerMapping[DummyMessage::class])->getArgument(0)[0][0];
310+
$firstReference = $commandsHandlerMapping[DummyMessage::class]->getValues()[0];
314311
$this->assertEquals(array(new Reference(HandlerOnSpecificBuses::class), 'dummyMethodForCommands'), $container->getDefinition($firstReference)->getArgument(0));
315312
}
316313

0 commit comments

Comments
 (0)