From f9f20b63f4d98bd316f03b35ca3c3222aa333d49 Mon Sep 17 00:00:00 2001 From: Christoph Wurst Date: Mon, 12 Oct 2020 13:15:40 +0200 Subject: [PATCH 1/2] Annotate IContainer so Psalm knows what resove and query return Signed-off-by: Christoph Wurst --- lib/public/IContainer.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/public/IContainer.php b/lib/public/IContainer.php index 74fdf4aba5..cb29e52203 100644 --- a/lib/public/IContainer.php +++ b/lib/public/IContainer.php @@ -52,10 +52,14 @@ use Psr\Container\ContainerInterface; interface IContainer extends ContainerInterface { /** + * @template T + * * If a parameter is not registered in the container try to instantiate it * by using reflection to find out how to build the class * @param string $name the class name to resolve + * @psalm-param string|class-string $name * @return \stdClass + * @psalm-return ($name is class-string ? T : mixed) * @since 8.2.0 * @deprecated 20.0.0 use \Psr\Container\ContainerInterface::get * @throws ContainerExceptionInterface if the class could not be found or instantiated @@ -66,9 +70,13 @@ interface IContainer extends ContainerInterface { /** * Look up a service for a given name in the container. * + * @template T + * * @param string $name + * @psalm-param string|class-string $name * @param bool $autoload Should we try to autoload the service. If we are trying to resolve built in types this makes no sense for example * @return mixed + * @psalm-return ($name is class-string ? T : mixed) * @throws ContainerExceptionInterface if the query could not be resolved * @throws QueryException if the query could not be resolved * @since 6.0.0 From f464ef050bd329f8cac3bb20c932e2021ab49d37 Mon Sep 17 00:00:00 2001 From: Christoph Wurst Date: Wed, 14 Oct 2020 13:00:20 +0200 Subject: [PATCH 2/2] Fix type errors detected by Psalm Signed-off-by: Christoph Wurst --- apps/workflowengine/lib/Manager.php | 2 +- lib/base.php | 1 + lib/private/AppFramework/App.php | 9 +++++++-- lib/private/Collaboration/Collaborators/Search.php | 4 ++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/workflowengine/lib/Manager.php b/apps/workflowengine/lib/Manager.php index e93ad24b3a..c949e7f36f 100644 --- a/apps/workflowengine/lib/Manager.php +++ b/apps/workflowengine/lib/Manager.php @@ -695,7 +695,7 @@ class Manager implements IManager { } /** - * @return IEntity[] + * @return ICheck[] */ protected function getBuildInChecks(): array { try { diff --git a/lib/base.php b/lib/base.php index bb9b896341..a27e8ffc92 100644 --- a/lib/base.php +++ b/lib/base.php @@ -859,6 +859,7 @@ class OC { } private static function registerAppRestrictionsHooks() { + /** @var \OC\Group\Manager $groupManager */ $groupManager = self::$server->query(\OCP\IGroupManager::class); $groupManager->listen('\OC\Group', 'postDelete', function (\OCP\IGroup $group) { $appManager = self::$server->getAppManager(); diff --git a/lib/private/AppFramework/App.php b/lib/private/AppFramework/App.php index d93849a6db..d6bf7bc81c 100644 --- a/lib/private/AppFramework/App.php +++ b/lib/private/AppFramework/App.php @@ -34,6 +34,7 @@ namespace OC\AppFramework; use OC\AppFramework\DependencyInjection\DIContainer; use OC\AppFramework\Http\Dispatcher; +use OC\AppFramework\Http\Request; use OC\HintException; use OCP\AppFramework\Http; use OCP\AppFramework\Http\ICallbackResponse; @@ -114,9 +115,13 @@ class App { */ public static function main(string $controllerName, string $methodName, DIContainer $container, array $urlParams = null) { if (!is_null($urlParams)) { - $container->query(IRequest::class)->setUrlParameters($urlParams); + /** @var Request $request */ + $request = $container->query(IRequest::class); + $request->setUrlParameters($urlParams); } elseif (isset($container['urlParams']) && !is_null($container['urlParams'])) { - $container->query(IRequest::class)->setUrlParameters($container['urlParams']); + /** @var Request $request */ + $request = $container->query(IRequest::class); + $request->setUrlParameters($container['urlParams']); } $appName = $container['AppName']; diff --git a/lib/private/Collaboration/Collaborators/Search.php b/lib/private/Collaboration/Collaborators/Search.php index e7773858e5..1e0fd73979 100644 --- a/lib/private/Collaboration/Collaborators/Search.php +++ b/lib/private/Collaboration/Collaborators/Search.php @@ -68,14 +68,14 @@ class Search implements ISearch { foreach ($this->pluginList[$type] as $plugin) { /** @var ISearchPlugin $searchPlugin */ $searchPlugin = $this->c->resolve($plugin); - $hasMoreResults |= $searchPlugin->search($search, $limit, $offset, $searchResult); + $hasMoreResults = $searchPlugin->search($search, $limit, $offset, $searchResult) || $hasMoreResults; } } // Get from lookup server, not a separate share type if ($lookup) { $searchPlugin = $this->c->resolve(LookupPlugin::class); - $hasMoreResults |= $searchPlugin->search($search, $limit, $offset, $searchResult); + $hasMoreResults = $searchPlugin->search($search, $limit, $offset, $searchResult) || $hasMoreResults; } // sanitizing, could go into the plugins as well