diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_heterogeneous_nested_array_key.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_heterogeneous_nested_array_key.php.inc new file mode 100644 index 00000000000..fa57efe6e77 --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_heterogeneous_nested_array_key.php.inc @@ -0,0 +1,21 @@ +sink([["x" => 1], "s"]); + } + + public function two() + { + return $this->sink([[["d" => 1]]]); + } + + protected function sink(array $data) + { + return $data; + } +} diff --git a/rules/Privatization/TypeManipulator/TypeNormalizer.php b/rules/Privatization/TypeManipulator/TypeNormalizer.php index 11ce83a5cc5..8594031162a 100644 --- a/rules/Privatization/TypeManipulator/TypeNormalizer.php +++ b/rules/Privatization/TypeManipulator/TypeNormalizer.php @@ -196,10 +196,14 @@ private function narrowToAlwaysKnownArrayType(UnionType $unionType): ?ArrayType return null; } - $arrayUniqueKeyType = $this->arrayTypeLeastCommonDenominatorResolver->sharedArrayStructure( + $sharedArrayStructure = $this->arrayTypeLeastCommonDenominatorResolver->sharedArrayStructure( ...$unionType->getTypes() ); - return new ArrayType($arrayUniqueKeyType, new MixedType()); + if (! $sharedArrayStructure instanceof ArrayType) { + return null; + } + + return $sharedArrayStructure; } /**