From 24fc706b6f3c585a7c784797e9381768d417fce1 Mon Sep 17 00:00:00 2001 From: Ondrej Mirtes Date: Thu, 4 May 2023 12:53:07 +0200 Subject: [PATCH] Revert "Avoid false positive about array result" This reverts commit b3a7b16ac6a57f6135e6d009d5bf65ffcdcf7c62. --- .../QueryResultDynamicReturnTypeExtension.php | 11 +++-------- .../Doctrine/data/QueryResult/queryResult.php | 16 ++++++++-------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php b/src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php index 7d047768..e7357b35 100644 --- a/src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php +++ b/src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php @@ -199,14 +199,9 @@ static function (Type $type, callable $traverse) use ($objectManager): Type { return new MixedType(); } - if (!$objectManager->getMetadataFactory()->hasMetadataFor($type->getClassName())) { - return $traverse($type); - } - - // We could return `new ArrayTyp(new MixedType(), new MixedType())` - // but the lack of precision in the array keys/values would give false positive - // @see https://github.com/phpstan/phpstan-doctrine/pull/412#issuecomment-1497092934 - return new MixedType(); + return $objectManager->getMetadataFactory()->hasMetadataFor($type->getClassName()) + ? new ArrayType(new MixedType(), new MixedType()) + : $traverse($type); } ); } diff --git a/tests/Type/Doctrine/data/QueryResult/queryResult.php b/tests/Type/Doctrine/data/QueryResult/queryResult.php index d8681e76..61ed83d1 100644 --- a/tests/Type/Doctrine/data/QueryResult/queryResult.php +++ b/tests/Type/Doctrine/data/QueryResult/queryResult.php @@ -155,35 +155,35 @@ public function testReturnTypeOfQueryMethodsWithExplicitArrayHydrationMode(Entit '); assertType( - 'list', + 'list', $query->getResult(AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'list', + 'list', $query->getArrayResult() ); assertType( - 'iterable', + 'iterable', $query->toIterable([], AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'list', + 'list', $query->execute(null, AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'list', + 'list', $query->executeIgnoreQueryCache(null, AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'list', + 'list', $query->executeUsingQueryCache(null, AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'mixed', + 'array', $query->getSingleResult(AbstractQuery::HYDRATE_ARRAY) ); assertType( - 'mixed', + 'array|null', $query->getOneOrNullResult(AbstractQuery::HYDRATE_ARRAY) );