From 469ba175ce77d23af868cbe5cbf14891e09075a2 Mon Sep 17 00:00:00 2001 From: Christoph Wurst Date: Wed, 28 Oct 2020 08:54:24 +0100 Subject: [PATCH 1/2] Type the event dispatcher listener callables with Psalm Signed-off-by: Christoph Wurst --- lib/public/EventDispatcher/IEventDispatcher.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/public/EventDispatcher/IEventDispatcher.php b/lib/public/EventDispatcher/IEventDispatcher.php index 095178f16e..6f3adf159c 100644 --- a/lib/public/EventDispatcher/IEventDispatcher.php +++ b/lib/public/EventDispatcher/IEventDispatcher.php @@ -39,6 +39,7 @@ interface IEventDispatcher { * @param string $eventName preferably the fully-qualified class name of the Event sub class * @psalm-param string|class-string $eventName preferably the fully-qualified class name of the Event sub class * @param callable $listener the object that is invoked when a matching event is dispatched + * @psalm-param callable(T):void $listener * @param int $priority * * @since 17.0.0 @@ -50,6 +51,7 @@ interface IEventDispatcher { * @param string $eventName preferably the fully-qualified class name of the Event sub class * @psalm-param string|class-string $eventName preferably the fully-qualified class name of the Event sub class * @param callable $listener the object that is invoked when a matching event is dispatched + * @psalm-param callable(T):void $listener * * @since 19.0.0 */ From 22f04a7cc3d6911652452773c9432af6d53f90f7 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Thu, 29 Oct 2020 20:15:04 +0100 Subject: [PATCH 2/2] Fix invalid usages of the new dispatcher Signed-off-by: Roeland Jago Douma --- apps/files_sharing/lib/AppInfo/Application.php | 10 ++++++---- .../lib/AppInfo/Application.php | 4 ++-- core/Application.php | 6 ++++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/apps/files_sharing/lib/AppInfo/Application.php b/apps/files_sharing/lib/AppInfo/Application.php index 6448d0fab4..fd71f58f12 100644 --- a/apps/files_sharing/lib/AppInfo/Application.php +++ b/apps/files_sharing/lib/AppInfo/Application.php @@ -59,6 +59,7 @@ use OCP\IServerContainer; use OCP\Share\Events\ShareCreatedEvent; use OCP\Util; use Psr\Container\ContainerInterface; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\GenericEvent; class Application extends App { @@ -74,6 +75,7 @@ class Application extends App { /** @var IEventDispatcher $dispatcher */ $dispatcher = $container->query(IEventDispatcher::class); + $oldDispatcher = $container->getServer()->getEventDispatcher(); $mountProviderCollection = $server->getMountProviderCollection(); $notifications = $server->getNotificationManager(); @@ -124,7 +126,7 @@ class Application extends App { $notifications->registerNotifierService(Notifier::class); $this->registerMountProviders($mountProviderCollection); - $this->registerEventsScripts($dispatcher); + $this->registerEventsScripts($dispatcher, $oldDispatcher); $this->setupSharingMenus(); /** @@ -138,7 +140,7 @@ class Application extends App { $mountProviderCollection->registerProvider($this->getContainer()->query('ExternalMountProvider')); } - protected function registerEventsScripts(IEventDispatcher $dispatcher) { + protected function registerEventsScripts(IEventDispatcher $dispatcher, EventDispatcherInterface $oldDispatcher) { // sidebar and files scripts $dispatcher->addServiceListener(LoadAdditionalScriptsEvent::class, LoadAdditionalListener::class); $dispatcher->addServiceListener(BeforeTemplateRenderedEvent::class, LegacyBeforeTemplateRenderedListener::class); @@ -151,12 +153,12 @@ class Application extends App { $dispatcher->addServiceListener(UserAddedEvent::class, UserAddedToGroupListener::class); // notifications api to accept incoming user shares - $dispatcher->addListener('OCP\Share::postShare', function (GenericEvent $event) { + $oldDispatcher->addListener('OCP\Share::postShare', function (GenericEvent $event) { /** @var Listener $listener */ $listener = $this->getContainer()->query(Listener::class); $listener->shareNotification($event); }); - $dispatcher->addListener(IGroup::class . '::postAddUser', function (GenericEvent $event) { + $oldDispatcher->addListener(IGroup::class . '::postAddUser', function (GenericEvent $event) { /** @var Listener $listener */ $listener = $this->getContainer()->query(Listener::class); $listener->userAddedToGroup($event); diff --git a/apps/lookup_server_connector/lib/AppInfo/Application.php b/apps/lookup_server_connector/lib/AppInfo/Application.php index 1cd999eae8..707a06af6f 100644 --- a/apps/lookup_server_connector/lib/AppInfo/Application.php +++ b/apps/lookup_server_connector/lib/AppInfo/Application.php @@ -35,9 +35,9 @@ use OCP\AppFramework\App; use OCP\AppFramework\Bootstrap\IBootContext; use OCP\AppFramework\Bootstrap\IBootstrap; use OCP\AppFramework\Bootstrap\IRegistrationContext; -use OCP\EventDispatcher\IEventDispatcher; use OCP\AppFramework\IAppContainer; use OCP\IUser; +use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\EventDispatcher\GenericEvent; class Application extends App implements IBootstrap { @@ -57,7 +57,7 @@ class Application extends App implements IBootstrap { /** * @todo move the OCP events and then move the registration to `register` */ - private function registerEventListeners(IEventDispatcher $dispatcher, + private function registerEventListeners(EventDispatcher $dispatcher, IAppContainer $appContainer): void { $dispatcher->addListener('OC\AccountManager::userUpdated', function (GenericEvent $event) use ($appContainer) { /** @var IUser $user */ diff --git a/core/Application.php b/core/Application.php index 2e2579f094..a452ca9677 100644 --- a/core/Application.php +++ b/core/Application.php @@ -73,7 +73,9 @@ class Application extends App { $notificationManager->registerNotifierService(RemoveLinkSharesNotifier::class); $notificationManager->registerNotifierService(AuthenticationNotifier::class); - $eventDispatcher->addListener(IDBConnection::CHECK_MISSING_INDEXES_EVENT, + $oldEventDispatcher = $server->getEventDispatcher(); + + $oldEventDispatcher->addListener(IDBConnection::CHECK_MISSING_INDEXES_EVENT, function (GenericEvent $event) use ($container) { /** @var MissingIndexInformation $subject */ $subject = $event->getSubject(); @@ -179,7 +181,7 @@ class Application extends App { } ); - $eventDispatcher->addListener(IDBConnection::CHECK_MISSING_COLUMNS_EVENT, + $oldEventDispatcher->addListener(IDBConnection::CHECK_MISSING_COLUMNS_EVENT, function (GenericEvent $event) use ($container) { /** @var MissingColumnInformation $subject */ $subject = $event->getSubject();