Merge pull request #58261 from nextcloud/fix/simplecontainer/get-return-type
Some checks are pending
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Integration sqlite / changes (push) Waiting to run
Integration sqlite / integration-sqlite (master, 8.4, main, --tags ~@large files_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, capabilities_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, collaboration_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, comments_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, dav_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, federation_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, file_conversions) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, files_reminders) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, filesdrop_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, ldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, openldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, openldap_numerical_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, remoteapi_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, routing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, setup_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, sharees_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, sharing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, theming_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, videoverification_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite-summary (push) Blocked by required conditions
Psalm static code analysis / static-code-analysis (push) Waiting to run
Psalm static code analysis / static-code-analysis-security (push) Waiting to run
Psalm static code analysis / static-code-analysis-ocp (push) Waiting to run
Psalm static code analysis / static-code-analysis-ncu (push) Waiting to run
Psalm static code analysis / static-code-analysis-strict (push) Waiting to run

This commit is contained in:
Kate 2026-02-12 10:56:53 +01:00 committed by GitHub
commit 4d6959da27
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 13 additions and 19 deletions

View file

@ -8,13 +8,15 @@ declare(strict_types=1);
*/
namespace OC\AppFramework\Bootstrap;
use OC\AppFramework\Utility\SimpleContainer;
/**
* @psalm-immutable
*/
class ServiceFactoryRegistration extends ARegistration {
/**
* @var callable
* @psalm-var callable(\Psr\Container\ContainerInterface): mixed
* @psalm-var callable(SimpleContainer): mixed
*/
private $factory;
@ -36,7 +38,7 @@ class ServiceFactoryRegistration extends ARegistration {
}
/**
* @psalm-return callable(\Psr\Container\ContainerInterface): mixed
* @psalm-return callable(SimpleContainer): mixed
*/
public function getFactory(): callable {
return $this->factory;

View file

@ -37,10 +37,7 @@ class SimpleContainer implements ArrayAccess, ContainerInterface, IContainer {
/**
* @template T
* @param class-string<T>|string $id
* @return T|mixed
* @psalm-template S as class-string<T>|string
* @psalm-param S $id
* @psalm-return (S is class-string<T> ? T : mixed)
* @return ($id is class-string<T> ? T : mixed)
*/
public function get(string $id): mixed {
return $this->query($id);
@ -172,15 +169,6 @@ class SimpleContainer implements ArrayAccess, ContainerInterface, IContainer {
$this[$name] = $value;
}
/**
* The given closure is call the first time the given service is queried.
* The closure has to return the instance for the given service.
* Created instance will be cached in case $shared is true.
*
* @param string $name name of the service to register another backend for
* @param Closure $closure the closure to be called on service creation
* @param bool $shared
*/
public function registerService($name, Closure $closure, $shared = true) {
$wrapped = function () use ($closure) {
return $closure($this);

View file

@ -958,7 +958,7 @@ class Server extends ServerContainer implements IServerContainer {
$this->registerService(ILockingProvider::class, function (ContainerInterface $c) {
$ini = $c->get(IniGetWrapper::class);
$config = $c->get(IConfig::class);
$ttl = $config->getSystemValueInt('filelocking.ttl', max(3600, $ini->getNumeric('max_execution_time')));
$ttl = $config->getSystemValueInt('filelocking.ttl', max(3600, (int)($ini->getNumeric('max_execution_time') ?? 0)));
if ($config->getSystemValueBool('filelocking.enabled', true) || (defined('PHPUNIT_RUN') && PHPUNIT_RUN)) {
/** @var Factory $memcacheFactory */
$memcacheFactory = $c->get(ICacheFactory::class);
@ -1212,7 +1212,9 @@ class Server extends ServerContainer implements IServerContainer {
});
$this->registerService(ISession::class, function (ContainerInterface $c) {
return $c->get(IUserSession::class)->getSession();
/** @var Session $session */
$session = $c->get(IUserSession::class);
return $session->getSession();
}, false);
$this->registerService(IShareHelper::class, function (ContainerInterface $c) {

View file

@ -9,6 +9,7 @@ declare(strict_types=1);
namespace OCP\AppFramework\Bootstrap;
use OC\AppFramework\Utility\SimpleContainer;
use OCP\AppFramework\IAppContainer;
use OCP\Authentication\TwoFactorAuth\IProvider;
use OCP\Calendar\ICalendarProvider;
@ -68,7 +69,7 @@ interface IRegistrationContext {
*
* @param string $name
* @param callable $factory
* @psalm-param callable(\Psr\Container\ContainerInterface): mixed $factory
* @psalm-param callable(SimpleContainer): mixed $factory
* @param bool $shared If set to true the factory result will be cached otherwise every query will call the factory again
*
* @return void

View file

@ -11,6 +11,7 @@
namespace OCP;
use Closure;
use OC\AppFramework\Utility\SimpleContainer;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;
@ -75,7 +76,7 @@ interface IContainer extends ContainerInterface {
* In case the parameter is false the service will be recreated on every call.
*
* @param string $name
* @param \Closure $closure
* @param \Closure(SimpleContainer): mixed $closure
* @param bool $shared
* @return void
* @since 6.0.0