nodeNameResolver = $nodeNameResolver; $this->namedToUnnamedArgs = $namedToUnnamedArgs; } /** * @param Arg[] $currentArgs * @return Arg[] * @param \PHPStan\Reflection\FunctionReflection|\PHPStan\Reflection\MethodReflection $functionLikeReflection */ public function resolveFromReflection($functionLikeReflection, array $currentArgs) : array { $parametersAcceptor = \PHPStan\Reflection\ParametersAcceptorSelector::selectSingle($functionLikeReflection->getVariants()); $unnamedArgs = []; $parameters = $parametersAcceptor->getParameters(); $isNativeFunctionReflection = $functionLikeReflection instanceof \PHPStan\Reflection\Native\NativeFunctionReflection; if ($isNativeFunctionReflection) { $functionLikeReflection = new \ReflectionFunction($functionLikeReflection->getName()); } /** @var Arg[] $unnamedArgs */ $unnamedArgs = []; $toFillArgs = []; foreach ($currentArgs as $key => $arg) { if ($arg->name === null) { $unnamedArgs[$key] = new \PhpParser\Node\Arg($arg->value, $arg->byRef, $arg->unpack, $arg->getAttributes(), null); continue; } /** @var string $argName */ $argName = $this->nodeNameResolver->getName($arg->name); $toFillArgs[] = $argName; } $unnamedArgs = $this->namedToUnnamedArgs->fillFromNamedArgs($parameters, $currentArgs, $toFillArgs, $unnamedArgs); $unnamedArgs = $this->namedToUnnamedArgs->fillFromJumpedNamedArgs($functionLikeReflection, $unnamedArgs, $isNativeFunctionReflection, $parameters); \ksort($unnamedArgs); return $unnamedArgs; } }