Skip to content

Commit a2487c9

Browse files
committed
More testcases, less magic, allow all php
1 parent 7734e8c commit a2487c9

File tree

3 files changed

+261
-64
lines changed

3 files changed

+261
-64
lines changed

src/Type/Doctrine/HydrationModeReturnTypeResolver.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace PHPStan\Type\Doctrine;
44

55
use Doctrine\ORM\AbstractQuery;
6+
use Doctrine\Persistence\ObjectManager;
67
use PHPStan\Type\Accessory\AccessoryArrayListType;
78
use PHPStan\Type\ArrayType;
89
use PHPStan\Type\BenevolentUnionType;
@@ -24,7 +25,8 @@ public function getMethodReturnTypeForHydrationMode(
2425
string $methodName,
2526
int $hydrationMode,
2627
Type $queryKeyType,
27-
Type $queryResultType
28+
Type $queryResultType,
29+
?ObjectManager $objectManager
2830
): ?Type
2931
{
3032
$isVoidType = (new VoidType())->isSuperTypeOf($queryResultType);
@@ -45,7 +47,7 @@ public function getMethodReturnTypeForHydrationMode(
4547
case AbstractQuery::HYDRATE_OBJECT:
4648
break;
4749
case AbstractQuery::HYDRATE_ARRAY:
48-
$queryResultType = $this->getArrayHydratedReturnType($queryResultType);
50+
$queryResultType = $this->getArrayHydratedReturnType($queryResultType, $objectManager);
4951
break;
5052
case AbstractQuery::HYDRATE_SIMPLEOBJECT:
5153
$queryResultType = $this->getSimpleObjectHydratedReturnType($queryResultType);
@@ -94,10 +96,8 @@ public function getMethodReturnTypeForHydrationMode(
9496
*
9597
* @see https://github.com/phpstan/phpstan-doctrine/pull/412#issuecomment-1497092934
9698
*/
97-
private function getArrayHydratedReturnType(Type $queryResultType): ?Type
99+
private function getArrayHydratedReturnType(Type $queryResultType, ?ObjectManager $objectManager): ?Type
98100
{
99-
$objectManager = $this->objectMetadataResolver->getObjectManager();
100-
101101
$mixedFound = false;
102102
$queryResultType = TypeTraverser::map(
103103
$queryResultType,

src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,12 @@
88
use PHPStan\Reflection\MethodReflection;
99
use PHPStan\Reflection\ParametersAcceptorSelector;
1010
use PHPStan\ShouldNotHappenException;
11-
use PHPStan\Type\Accessory\AccessoryArrayListType;
12-
use PHPStan\Type\ArrayType;
13-
use PHPStan\Type\BenevolentUnionType;
1411
use PHPStan\Type\Constant\ConstantIntegerType;
1512
use PHPStan\Type\Doctrine\HydrationModeReturnTypeResolver;
1613
use PHPStan\Type\Doctrine\ObjectMetadataResolver;
1714
use PHPStan\Type\DynamicMethodReturnTypeExtension;
18-
use PHPStan\Type\IntegerType;
19-
use PHPStan\Type\IterableType;
20-
use PHPStan\Type\MixedType;
2115
use PHPStan\Type\NullType;
22-
use PHPStan\Type\ObjectWithoutClassType;
2316
use PHPStan\Type\Type;
24-
use PHPStan\Type\TypeCombinator;
25-
use PHPStan\Type\TypeTraverser;
26-
use PHPStan\Type\TypeUtils;
27-
use PHPStan\Type\TypeWithClassName;
28-
use PHPStan\Type\VoidType;
2917

3018
final class QueryResultDynamicReturnTypeExtension implements DynamicMethodReturnTypeExtension
3119
{
@@ -107,7 +95,8 @@ public function getTypeFromMethodCall(
10795
$methodReflection->getName(),
10896
$hydrationMode->getValue(),
10997
$queryType->getTemplateType(AbstractQuery::class, 'TKey'),
110-
$queryType->getTemplateType(AbstractQuery::class, 'TResult')
98+
$queryType->getTemplateType(AbstractQuery::class, 'TResult'),
99+
$this->objectMetadataResolver->getObjectManager()
111100
);
112101
}
113102

0 commit comments

Comments
 (0)