From 01000d4398b3869be87f1b6f9154e43afef7bff7 Mon Sep 17 00:00:00 2001 From: Vincent Langlet <vincentlanglet@hotmail.fr> Date: Sat, 25 Feb 2023 16:22:01 +0100 Subject: [PATCH] Solve phpstan deprecation --- .../QueryResultDynamicReturnTypeExtension.php | 47 ++++++++++++------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php b/src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php index a46f96be..b63ec5c3 100644 --- a/src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php +++ b/src/Type/Doctrine/Query/QueryResultDynamicReturnTypeExtension.php @@ -209,19 +209,22 @@ static function (Type $type, callable $traverse) use ($objectManager): Type { private function getScalarHydratedReturnType(Type $queryResultType): Type { - if (!$queryResultType instanceof ArrayType) { + if (!$queryResultType->isArray()->yes()) { return new ArrayType(new MixedType(), new MixedType()); } - $itemType = $queryResultType->getItemType(); - $hasNoObject = (new ObjectWithoutClassType())->isSuperTypeOf($itemType)->no(); - $hasNoArray = $itemType->isArray()->no(); + foreach ($queryResultType->getArrays() as $arrayType) { + $itemType = $arrayType->getItemType(); - if ($hasNoArray && $hasNoObject) { - return $queryResultType; + if ( + !(new ObjectWithoutClassType())->isSuperTypeOf($itemType)->no() + || !$itemType->isArray()->no() + ) { + new ArrayType(new MixedType(), new MixedType()); + } } - return new ArrayType(new MixedType(), new MixedType()); + return $queryResultType; } private function getSimpleObjectHydratedReturnType(Type $queryResultType): Type @@ -236,31 +239,41 @@ private function getSimpleObjectHydratedReturnType(Type $queryResultType): Type private function getSingleScalarHydratedReturnType(Type $queryResultType): Type { $queryResultType = $this->getScalarHydratedReturnType($queryResultType); - if (!$queryResultType instanceof ConstantArrayType) { + if (!$queryResultType->isConstantArray()->yes()) { return new MixedType(); } - $values = $queryResultType->getValueTypes(); - if (count($values) !== 1) { - return new MixedType(); + $types = []; + foreach ($queryResultType->getConstantArrays() as $constantArrayType) { + $values = $constantArrayType->getValueTypes(); + if (count($values) !== 1) { + return new MixedType(); + } + + $types[] = $constantArrayType->getFirstIterableValueType(); } - return $queryResultType->getFirstIterableValueType(); + return TypeCombinator::union(...$types); } private function getScalarColumnHydratedReturnType(Type $queryResultType): Type { $queryResultType = $this->getScalarHydratedReturnType($queryResultType); - if (!$queryResultType instanceof ConstantArrayType) { + if (!$queryResultType->isConstantArray()->yes()) { return new MixedType(); } - $values = $queryResultType->getValueTypes(); - if (count($values) !== 1) { - return new MixedType(); + $types = []; + foreach ($queryResultType->getConstantArrays() as $constantArrayType) { + $values = $constantArrayType->getValueTypes(); + if (count($values) !== 1) { + return new MixedType(); + } + + $types[] = $constantArrayType->getFirstIterableValueType(); } - return $queryResultType->getFirstIterableValueType(); + return TypeCombinator::union(...$types); } private function originalReturnType(MethodReflection $methodReflection): Type