Skip to content

Commit 75ee094

Browse files
authored
[DeadCode] Skip with use of func_num_args() on RemoveNullArgOnNullDefaultParamRector (#8030)
* [DeadCode] SKip with use of func_num_args() on RemoveNullArgOnNullDefaultParamRector * fix
1 parent 78e99a4 commit 75ee094

3 files changed

Lines changed: 34 additions & 1 deletion

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\Tests\DeadCode\Rector\MethodCall\RemoveNullArgOnNullDefaultParamRector\Fixture;
6+
7+
/**
8+
* @see https://3v4l.org/RCVaU#v8.3.9 vs https://3v4l.org/6DSlE#v8.3.9
9+
*/
10+
final class SkipWithUseOfFuncNumArgs
11+
{
12+
private $b = 1;
13+
14+
public function set($a, $b = null)
15+
{
16+
if (func_num_args() > 1) {
17+
$this->b = $b;
18+
}
19+
}
20+
21+
public function get()
22+
{
23+
$this->set(1, null);
24+
return $this->b;
25+
}
26+
}

‎rules/DeadCode/NodeAnalyzer/CallLikeParamDefaultResolver.php‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@
1212
use PHPStan\Reflection\MethodReflection;
1313
use PHPStan\Reflection\ParametersAcceptorSelector;
1414
use PHPStan\Type\NullType;
15+
use Rector\NodeAnalyzer\VariadicAnalyzer;
1516
use Rector\Reflection\ReflectionResolver;
1617

1718
final readonly class CallLikeParamDefaultResolver
1819
{
1920
public function __construct(
2021
private ReflectionResolver $reflectionResolver,
22+
private VariadicAnalyzer $variadicAnalyzer,
2123
) {
2224
}
2325

@@ -38,6 +40,10 @@ public function resolveNullPositions(MethodCall|StaticCall|New_|FuncCall $callLi
3840
}
3941
}
4042

43+
if ($this->variadicAnalyzer->hasVariadicParameters($callLike)) {
44+
return [];
45+
}
46+
4147
$nullPositions = [];
4248

4349
$extendedParametersAcceptor = ParametersAcceptorSelector::combineAcceptors($reflection->getVariants());

‎src/NodeAnalyzer/VariadicAnalyzer.php‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use PhpParser\Node\Expr\FuncCall;
88
use PhpParser\Node\Expr\MethodCall;
9+
use PhpParser\Node\Expr\New_;
910
use PhpParser\Node\Expr\StaticCall;
1011
use PHPStan\Reflection\FunctionReflection;
1112
use PHPStan\Reflection\MethodReflection;
@@ -18,7 +19,7 @@ public function __construct(
1819
) {
1920
}
2021

21-
public function hasVariadicParameters(FuncCall | StaticCall | MethodCall $call): bool
22+
public function hasVariadicParameters(FuncCall | StaticCall | MethodCall | New_ $call): bool
2223
{
2324
$functionLikeReflection = $this->reflectionResolver->resolveFunctionLikeReflectionFromCall($call);
2425
if ($functionLikeReflection === null) {

0 commit comments

Comments
 (0)