diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/mixed_from_unserialize.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/mixed_from_unserialize.php.inc new file mode 100644 index 00000000000..42f536c8628 --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/mixed_from_unserialize.php.inc @@ -0,0 +1,40 @@ +doStuff(unserialize($param)); + } + + private function doStuff(array $value) + { + // do stuff with value + } +} + +?> +----- +doStuff(unserialize($param)); + } + + /** + * @param mixed[] $value + */ + private function doStuff(array $value) + { + // do stuff with value + } +} + +?> \ No newline at end of file diff --git a/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictReturnNewAnalyzer.php b/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictReturnNewAnalyzer.php index 21a099f90b3..a3aff70f2a2 100644 --- a/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictReturnNewAnalyzer.php +++ b/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictReturnNewAnalyzer.php @@ -4,6 +4,7 @@ namespace Rector\TypeDeclaration\NodeAnalyzer\ReturnTypeAnalyzer; +use PHPStan\Type\ObjectWithoutClassType; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\New_; @@ -53,7 +54,7 @@ public function matchAlwaysReturnVariableNew(ClassMethod|Function_ $functionLike } $returnType = $this->nodeTypeResolver->getNativeType($return->expr); - if ($returnType instanceof \PHPStan\Type\ObjectWithoutClassType) { + if ($returnType instanceof ObjectWithoutClassType) { $alwaysReturnedClassNames[] = 'object'; continue; } diff --git a/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php b/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php index 12ce60a5b09..65016b5e907 100644 --- a/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php +++ b/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php @@ -7,6 +7,8 @@ use PhpParser\Node; use PhpParser\Node\Stmt\Class_; use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; +use PHPStan\PhpDocParser\Ast\Type\ArrayTypeNode; +use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; use PHPStan\Type\ArrayType; use PHPStan\Type\IntegerType; use PHPStan\Type\MixedType; @@ -132,6 +134,10 @@ public function refactor(Node $node): ?Node $normalizedResolvedParameterType ); + if ($arrayDocTypeNode instanceof IdentifierTypeNode && $arrayDocTypeNode->name === 'mixed') { + $arrayDocTypeNode = new ArrayTypeNode($arrayDocTypeNode); + } + $paramTagValueNode = new ParamTagValueNode($arrayDocTypeNode, false, '$' . $parameterName, '', false); $classMethodPhpDocInfo->addTagValueNode($paramTagValueNode);