diff --git a/rules-tests/DeadCode/Rector/MethodCall/RemoveNullArgOnNullDefaultParamRector/Fixture/skip_with_useof_func_num_args.php.inc b/rules-tests/DeadCode/Rector/MethodCall/RemoveNullArgOnNullDefaultParamRector/Fixture/skip_with_useof_func_num_args.php.inc new file mode 100644 index 00000000000..80ea6638811 --- /dev/null +++ b/rules-tests/DeadCode/Rector/MethodCall/RemoveNullArgOnNullDefaultParamRector/Fixture/skip_with_useof_func_num_args.php.inc @@ -0,0 +1,26 @@ + 1) { + $this->b = $b; + } + } + + public function get() + { + $this->set(1, null); + return $this->b; + } +} diff --git a/rules/DeadCode/NodeAnalyzer/CallLikeParamDefaultResolver.php b/rules/DeadCode/NodeAnalyzer/CallLikeParamDefaultResolver.php index 6358ab26ad9..ecf19620a29 100644 --- a/rules/DeadCode/NodeAnalyzer/CallLikeParamDefaultResolver.php +++ b/rules/DeadCode/NodeAnalyzer/CallLikeParamDefaultResolver.php @@ -12,12 +12,14 @@ use PHPStan\Reflection\MethodReflection; use PHPStan\Reflection\ParametersAcceptorSelector; use PHPStan\Type\NullType; +use Rector\NodeAnalyzer\VariadicAnalyzer; use Rector\Reflection\ReflectionResolver; final readonly class CallLikeParamDefaultResolver { public function __construct( private ReflectionResolver $reflectionResolver, + private VariadicAnalyzer $variadicAnalyzer, ) { } @@ -38,6 +40,10 @@ public function resolveNullPositions(MethodCall|StaticCall|New_|FuncCall $callLi } } + if ($this->variadicAnalyzer->hasVariadicParameters($callLike)) { + return []; + } + $nullPositions = []; $extendedParametersAcceptor = ParametersAcceptorSelector::combineAcceptors($reflection->getVariants()); diff --git a/src/NodeAnalyzer/VariadicAnalyzer.php b/src/NodeAnalyzer/VariadicAnalyzer.php index b120be23fc5..a20b998de74 100644 --- a/src/NodeAnalyzer/VariadicAnalyzer.php +++ b/src/NodeAnalyzer/VariadicAnalyzer.php @@ -6,6 +6,7 @@ use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\MethodCall; +use PhpParser\Node\Expr\New_; use PhpParser\Node\Expr\StaticCall; use PHPStan\Reflection\FunctionReflection; use PHPStan\Reflection\MethodReflection; @@ -18,7 +19,7 @@ public function __construct( ) { } - public function hasVariadicParameters(FuncCall | StaticCall | MethodCall $call): bool + public function hasVariadicParameters(FuncCall | StaticCall | MethodCall | New_ $call): bool { $functionLikeReflection = $this->reflectionResolver->resolveFunctionLikeReflectionFromCall($call); if ($functionLikeReflection === null) {