Making cache rebuild correctly with MessageSubscriberInterface return values

This commit is contained in:
Ryan Weaver 2019-05-09 11:10:11 -04:00
parent c083e20cf2
commit d88446be07
3 changed files with 42 additions and 0 deletions

View File

@ -13,6 +13,7 @@ namespace Symfony\Component\Config\Resource;
use Symfony\Component\DependencyInjection\ServiceSubscriberInterface as LegacyServiceSubscriberInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Messenger\Handler\MessageSubscriberInterface;
use Symfony\Contracts\Service\ServiceSubscriberInterface;
/**
@ -164,6 +165,13 @@ class ReflectionClassResource implements SelfCheckingResourceInterface, \Seriali
yield print_r($class->name::getSubscribedEvents(), true);
}
if (interface_exists(MessageSubscriberInterface::class, false) && $class->isSubclassOf(MessageSubscriberInterface::class)) {
yield MessageSubscriberInterface::class;
foreach ($class->name::getHandledMessages() as $key => $value) {
yield $key.print_r($value, true);
}
}
if (interface_exists(LegacyServiceSubscriberInterface::class, false) && $class->isSubclassOf(LegacyServiceSubscriberInterface::class)) {
yield LegacyServiceSubscriberInterface::class;
yield print_r([$class->name, 'getSubscribedServices'](), true);

View File

@ -15,6 +15,7 @@ use PHPUnit\Framework\TestCase;
use Symfony\Component\Config\Resource\ReflectionClassResource;
use Symfony\Component\DependencyInjection\ServiceSubscriberInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Messenger\Handler\MessageSubscriberInterface;
class ReflectionClassResourceTest extends TestCase
{
@ -147,6 +148,24 @@ EOPHP;
$this->assertTrue($res->isFresh(0));
}
public function testMessageSubscriber()
{
$res = new ReflectionClassResource(new \ReflectionClass(TestMessageSubscriber::class));
$this->assertTrue($res->isFresh(0));
TestMessageSubscriberConfigHolder::$handledMessages = ['SomeMessageClass' => []];
$this->assertFalse($res->isFresh(0));
$res = new ReflectionClassResource(new \ReflectionClass(TestMessageSubscriber::class));
$this->assertTrue($res->isFresh(0));
TestMessageSubscriberConfigHolder::$handledMessages = ['OtherMessageClass' => []];
$this->assertFalse($res->isFresh(0));
$res = new ReflectionClassResource(new \ReflectionClass(TestMessageSubscriber::class));
$this->assertTrue($res->isFresh(0));
}
public function testServiceSubscriber()
{
$res = new ReflectionClassResource(new \ReflectionClass(TestServiceSubscriber::class));
@ -174,6 +193,20 @@ class TestEventSubscriber implements EventSubscriberInterface
}
}
class TestMessageSubscriber implements MessageSubscriberInterface
{
public static function getHandledMessages(): iterable
{
foreach (TestMessageSubscriberConfigHolder::$handledMessages as $key => $subscribedMessage) {
yield $key => $subscribedMessage;
}
}
}
class TestMessageSubscriberConfigHolder
{
public static $handledMessages = [];
}
class TestServiceSubscriber implements ServiceSubscriberInterface
{
public static $subscribedServices = [];

View File

@ -24,6 +24,7 @@
"symfony/dependency-injection": "~3.4|~4.0",
"symfony/event-dispatcher": "~3.4|~4.0",
"symfony/finder": "~3.4|~4.0",
"symfony/messenger": "~4.1",
"symfony/yaml": "~3.4|~4.0"
},
"conflict": {