From ad648b6a3b854558c151f1665655c6daa5551b6d Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Tue, 3 Mar 2026 09:02:08 +0100 Subject: [PATCH] TypeSpecifier refactor --- src/Analyser/TypeSpecifier.php | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Analyser/TypeSpecifier.php b/src/Analyser/TypeSpecifier.php index ec9cb809c03..718eb63e3c9 100644 --- a/src/Analyser/TypeSpecifier.php +++ b/src/Analyser/TypeSpecifier.php @@ -1543,7 +1543,7 @@ private function specifyTypesFromConditionalReturnType( return null; } - $argsMap = []; + $argumentExpr = null; $parameters = $parametersAcceptor->getParameters(); foreach ($call->getArgs() as $i => $arg) { if ($arg->unpack) { @@ -1558,28 +1558,28 @@ private function specifyTypesFromConditionalReturnType( continue; } - $argsMap['$' . $paramName] = $arg->value; + if ($returnType->getParameterName() !== '$' . $paramName) { + continue; + } + + $argumentExpr = $arg->value; + } + + if ($argumentExpr === null) { + return null; } - return $this->getConditionalSpecifiedTypes($returnType, $leftType, $rightType, $scope, $argsMap); + return $this->getConditionalSpecifiedTypes($returnType, $leftType, $rightType, $scope, $argumentExpr); } - /** - * @param array $argsMap - */ private function getConditionalSpecifiedTypes( ConditionalTypeForParameter $conditionalType, Type $leftType, Type $rightType, Scope $scope, - array $argsMap, + Expr $argumentExpr, ): ?SpecifiedTypes { - $parameterName = $conditionalType->getParameterName(); - if (!array_key_exists($parameterName, $argsMap)) { - return null; - } - $targetType = $conditionalType->getTarget(); $ifType = $conditionalType->getIf(); $elseType = $conditionalType->getElse(); @@ -1593,7 +1593,7 @@ private function getConditionalSpecifiedTypes( } $specifiedTypes = $this->create( - $argsMap[$parameterName], + $argumentExpr, $targetType, $context, $scope, @@ -1604,7 +1604,7 @@ private function getConditionalSpecifiedTypes( $context = $context->negate(); } - $specifiedTypes = $specifiedTypes->unionWith($this->specifyTypesInCondition($scope, $argsMap[$parameterName], $context)); + $specifiedTypes = $specifiedTypes->unionWith($this->specifyTypesInCondition($scope, $argumentExpr, $context)); } return $specifiedTypes;