From cadf1317701430025c1c5d446f080c5a772e1abd Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Fri, 26 Sep 2025 14:32:09 +0200 Subject: [PATCH] Skip null pass in ClassMethodArrayDocblockParamFromLocalCallsRector, as array param type declaration is already checked --- .../Fixture/remove_nullable.php.inc | 54 +++++++++++++++++++ ...ArrayDocblockParamFromLocalCallsRector.php | 5 ++ 2 files changed, 59 insertions(+) create mode 100644 rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/remove_nullable.php.inc diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/remove_nullable.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/remove_nullable.php.inc new file mode 100644 index 00000000000..0fb53569339 --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/remove_nullable.php.inc @@ -0,0 +1,54 @@ +run($this->getNames()); + } + + private function run(array $items) + { + } + + /** + * @return string[]|null + */ + private function getNames(): ?array + { + return ['Jim', 'Rohn']; + } +} + +?> +----- +run($this->getNames()); + } + + /** + * @param string[] $items + */ + private function run(array $items) + { + } + + /** + * @return string[]|null + */ + private function getNames(): ?array + { + return ['Jim', 'Rohn']; + } +} + +?> diff --git a/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php b/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php index 9b72e6880fd..bf031547a55 100644 --- a/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php +++ b/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php @@ -9,6 +9,7 @@ use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; use PHPStan\Type\MixedType; use PHPStan\Type\Type; +use PHPStan\Type\TypeCombinator; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\PhpParser\NodeFinder\LocalMethodCallFinder; use Rector\Rector\AbstractRector; @@ -112,10 +113,14 @@ public function refactor(Node $node): ?Node if (! $resolvedParameterType instanceof Type) { continue; } + if ($resolvedParameterType instanceof MixedType) { continue; } + // in case of array type declaration, null cannot be passed or is already casted + $resolvedParameterType = TypeCombinator::removeNull($resolvedParameterType); + $hasClassMethodChanged = $this->nodeDocblockTypeDecorator->decorateGenericIterableParamType( $resolvedParameterType, $classMethodPhpDocInfo,