From d88446be072ea3466eda4673f1611364cac5528a Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Thu, 9 May 2019 11:10:11 -0400 Subject: [PATCH] Making cache rebuild correctly with MessageSubscriberInterface return values --- .../Resource/ReflectionClassResource.php | 8 +++++ .../Resource/ReflectionClassResourceTest.php | 33 +++++++++++++++++++ src/Symfony/Component/Config/composer.json | 1 + 3 files changed, 42 insertions(+) diff --git a/src/Symfony/Component/Config/Resource/ReflectionClassResource.php b/src/Symfony/Component/Config/Resource/ReflectionClassResource.php index a7e73becf55f4..3890dd29eddd8 100644 --- a/src/Symfony/Component/Config/Resource/ReflectionClassResource.php +++ b/src/Symfony/Component/Config/Resource/ReflectionClassResource.php @@ -13,6 +13,7 @@ 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 @@ private function generateSignature(\ReflectionClass $class) 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); diff --git a/src/Symfony/Component/Config/Tests/Resource/ReflectionClassResourceTest.php b/src/Symfony/Component/Config/Tests/Resource/ReflectionClassResourceTest.php index abc461cd7c898..e22933245d252 100644 --- a/src/Symfony/Component/Config/Tests/Resource/ReflectionClassResourceTest.php +++ b/src/Symfony/Component/Config/Tests/Resource/ReflectionClassResourceTest.php @@ -15,6 +15,7 @@ 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 @@ public function testEventSubscriber() $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 @@ public static function getSubscribedEvents() } } +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 = []; diff --git a/src/Symfony/Component/Config/composer.json b/src/Symfony/Component/Config/composer.json index 35fbffdb69a41..00a88e81b5c50 100644 --- a/src/Symfony/Component/Config/composer.json +++ b/src/Symfony/Component/Config/composer.json @@ -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": {