diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_mixed_from_empty_array.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_mixed_from_empty_array.php.inc new file mode 100644 index 00000000000..9be7dcde250 --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_mixed_from_empty_array.php.inc @@ -0,0 +1,16 @@ +run($data); + } + + private function run(array $data) + { + } +} diff --git a/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php b/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php index 2c5f1d7334d..751ccaab5cd 100644 --- a/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php +++ b/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php @@ -13,7 +13,9 @@ use PhpParser\Node\VariadicPlaceholder; use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\ArrayType; +use PHPStan\Type\Constant\ConstantArrayType; use PHPStan\Type\MixedType; +use PHPStan\Type\NeverType; use PHPStan\Type\ObjectType; use PHPStan\Type\ThisType; use PHPStan\Type\Type; @@ -222,14 +224,14 @@ private function isEmptyArray(Expr $expr): bool private function isArrayMixedMixedType(Type $type): bool { - if (! $type instanceof ArrayType) { + if (! $type instanceof ArrayType && ! $type instanceof ConstantArrayType) { return false; } - if (! $type->getItemType() instanceof MixedType) { + if (! $type->getItemType() instanceof MixedType && ! $type->getItemType() instanceof NeverType) { return false; } - return $type->getKeyType() instanceof MixedType; + return $type->getKeyType() instanceof MixedType || $type->getKeyType() instanceof NeverType; } }