2021-01-22 02:41:09 +01:00
|
|
|
<?php
|
|
|
|
|
2021-05-09 20:15:43 +00:00
|
|
|
declare (strict_types=1);
|
2021-01-22 02:41:09 +01:00
|
|
|
namespace Rector\Php80\NodeResolver;
|
|
|
|
|
2021-06-24 08:24:49 +00:00
|
|
|
use PHPStan\Reflection\FunctionReflection;
|
|
|
|
use PHPStan\Reflection\MethodReflection;
|
|
|
|
use PHPStan\Reflection\ParameterReflection;
|
2021-06-28 17:10:14 +00:00
|
|
|
use PHPStan\Reflection\ParametersAcceptorSelector;
|
2021-01-22 02:41:09 +01:00
|
|
|
final class RequireOptionalParamResolver
|
|
|
|
{
|
|
|
|
/**
|
2021-06-24 08:24:49 +00:00
|
|
|
* @return ParameterReflection[]
|
|
|
|
* @param \PHPStan\Reflection\MethodReflection|\PHPStan\Reflection\FunctionReflection $functionLikeReflection
|
2021-01-22 02:41:09 +01:00
|
|
|
*/
|
2021-06-24 08:24:49 +00:00
|
|
|
public function resolveFromReflection($functionLikeReflection) : array
|
2021-01-22 02:41:09 +01:00
|
|
|
{
|
2021-06-28 17:10:14 +00:00
|
|
|
$parametersAcceptor = \PHPStan\Reflection\ParametersAcceptorSelector::selectSingle($functionLikeReflection->getVariants());
|
2021-01-22 02:41:09 +01:00
|
|
|
$optionalParams = [];
|
|
|
|
$requireParams = [];
|
2021-06-24 08:24:49 +00:00
|
|
|
foreach ($parametersAcceptor->getParameters() as $position => $parameterReflection) {
|
|
|
|
if ($parameterReflection->getDefaultValue() === null && !$parameterReflection->isVariadic()) {
|
|
|
|
$requireParams[$position] = $parameterReflection;
|
2021-01-22 02:41:09 +01:00
|
|
|
} else {
|
2021-06-24 08:24:49 +00:00
|
|
|
$optionalParams[$position] = $parameterReflection;
|
2021-01-22 02:41:09 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return $requireParams + $optionalParams;
|
|
|
|
}
|
|
|
|
}
|