File manager - Edit - /var/www/payraty/helpdesk/vendor/rector/rector/vendor/rector/rector-phpunit/src/NodeManipulator/ParamAndArgFromArrayResolver.php
Back
<?php declare (strict_types=1); namespace Rector\PHPUnit\NodeManipulator; use PhpParser\Node\Expr\Array_; use PhpParser\Node\Expr\ArrayItem; use PhpParser\Node\Expr\Variable; use PHPStan\Type\Type; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; use Rector\PHPUnit\ValueObject\ParamAndArg; final class ParamAndArgFromArrayResolver { /** * @readonly * @var \Rector\NodeTypeResolver\NodeTypeResolver */ private $nodeTypeResolver; /** * @readonly * @var \Rector\NodeTypeResolver\PHPStan\Type\TypeFactory */ private $typeFactory; public function __construct(NodeTypeResolver $nodeTypeResolver, TypeFactory $typeFactory) { $this->nodeTypeResolver = $nodeTypeResolver; $this->typeFactory = $typeFactory; } /** * @return ParamAndArg[] */ public function resolve(Array_ $array, string $variableName) : array { $isNestedArray = $this->isNestedArray($array); if ($isNestedArray) { return $this->collectParamAndArgsFromNestedArray($array, $variableName); } $itemsStaticType = $this->resolveItemStaticType($array, $isNestedArray); return $this->collectParamAndArgsFromNonNestedArray($array, $variableName, $itemsStaticType); } private function isNestedArray(Array_ $array) : bool { foreach ($array->items as $arrayItem) { if (!$arrayItem instanceof ArrayItem) { continue; } if ($arrayItem->value instanceof Array_) { return \true; } } return \false; } /** * @return ParamAndArg[] */ private function collectParamAndArgsFromNestedArray(Array_ $array, string $variableName) : array { $paramAndArgs = []; $i = 1; foreach ($array->items as $arrayItem) { if (!$arrayItem instanceof ArrayItem) { continue; } $nestedArray = $arrayItem->value; if (!$nestedArray instanceof Array_) { continue; } foreach ($nestedArray->items as $nestedArrayItem) { if (!$nestedArrayItem instanceof ArrayItem) { continue; } $variable = new Variable($variableName . ($i === 1 ? '' : $i)); $itemsStaticType = $this->nodeTypeResolver->getType($nestedArrayItem->value); $paramAndArgs[] = new ParamAndArg($variable, $itemsStaticType); ++$i; } } return $paramAndArgs; } private function resolveItemStaticType(Array_ $array, bool $isNestedArray) : Type { $staticTypes = []; if (!$isNestedArray) { foreach ($array->items as $arrayItem) { if (!$arrayItem instanceof ArrayItem) { continue; } $staticTypes[] = $this->nodeTypeResolver->getType($arrayItem->value); } } return $this->typeFactory->createMixedPassedOrUnionType($staticTypes); } /** * @return ParamAndArg[] */ private function collectParamAndArgsFromNonNestedArray(Array_ $array, string $variableName, Type $itemsStaticType) : array { $i = 1; $paramAndArgs = []; foreach ($array->items as $arrayItem) { if (!$arrayItem instanceof ArrayItem) { continue; } $variable = new Variable($variableName . ($i === 1 ? '' : $i)); $paramAndArgs[] = new ParamAndArg($variable, $itemsStaticType); ++$i; if (!$arrayItem->value instanceof Array_) { break; } } return $paramAndArgs; } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.30 | Generation time: 0 |
proxy
|
phpinfo
|
Settings