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) + { + } +} + +?> 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