From cc3d1dcdad61801c5cfa466cdea838e85c82d128 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Thu, 25 Sep 2025 01:29:19 +0700 Subject: [PATCH 1/2] [TypeDeclarationDocblocks] Handle crash on next empty array on ClassMethodArrayDocblockParamFromLocalCallsRector --- .../Fixture/not_zero_position.php.inc | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/not_zero_position.php.inc diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/not_zero_position.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/not_zero_position.php.inc new file mode 100644 index 00000000000..b246c65ec18 --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/not_zero_position.php.inc @@ -0,0 +1,38 @@ +run([], ['item1', 'item2']); + } + + private function run(array $data, array $items) + { + } +} + +?> +----- +run([], ['item1', 'item2']); + } + + /** + * @param string[] $items + */ + private function run(array $data, array $items) + { + } +} + +?> From f2d2652c68e58e677eb5a00bc345b1c0d8971f0e Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Thu, 25 Sep 2025 01:32:19 +0700 Subject: [PATCH 2/2] Fix --- .../NodeAnalyzer/CallTypesResolver.php | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php b/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php index a29dbc2fc20..0f5ad1c4cc3 100644 --- a/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php +++ b/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php @@ -124,17 +124,13 @@ private function unionToSingleType(array $staticTypesByArgumentPosition): array $staticTypeByArgumentPosition[$position] = $this->narrowParentObjectTreeToSingleObjectChildType( $unionedType ); - } - - if (count($staticTypeByArgumentPosition) !== 1) { - return $staticTypeByArgumentPosition; - } - if (! $staticTypeByArgumentPosition[0]->isNull()->yes()) { - return $staticTypeByArgumentPosition; + if ($staticTypeByArgumentPosition[$position]->isNull()->yes()) { + $staticTypeByArgumentPosition[$position] = new MixedType(); + } } - return [new MixedType()]; + return $staticTypeByArgumentPosition; } private function narrowParentObjectTreeToSingleObjectChildType(Type $type): Type