diff --git a/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php b/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php index b9f425a050c..a2b9441b9d3 100644 --- a/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php +++ b/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php @@ -18,10 +18,11 @@ use PHPStan\Type\Type; use PHPStan\Type\UnionType; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; -use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger; use Rector\Rector\AbstractRector; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; +use Rector\TypeDeclarationDocblocks\NodeDocblockTypeDecorator; use Rector\TypeDeclarationDocblocks\NodeFinder\ReturnNodeFinder; +use Rector\TypeDeclarationDocblocks\TagNodeAnalyzer\UsefulArrayTagNodeAnalyzer; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -34,7 +35,8 @@ public function __construct( private readonly PhpDocInfoFactory $phpDocInfoFactory, private readonly ReturnNodeFinder $returnNodeFinder, private readonly ReflectionProvider $reflectionProvider, - private readonly PhpDocTypeChanger $phpDocTypeChanger + private readonly UsefulArrayTagNodeAnalyzer $usefulArrayTagNodeAnalyzer, + private readonly NodeDocblockTypeDecorator $nodeDocblockTypeDecorator ) { } @@ -108,9 +110,7 @@ public function getNodeTypes(): array public function refactor(Node $node): ?Node { $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); - $returnType = $phpDocInfo->getReturnType(); - - if ($returnType instanceof ArrayType && ! $returnType->getItemType() instanceof MixedType) { + if ($this->usefulArrayTagNodeAnalyzer->isUsefulArrayTag($phpDocInfo->getReturnTagValue())) { return null; } @@ -176,7 +176,11 @@ public function refactor(Node $node): ?Node new FullyQualifiedObjectType($firstSharedType) ); - $hasChanged = $this->phpDocTypeChanger->changeReturnType($node, $phpDocInfo, $objectTypeArrayType); + $hasChanged = $this->nodeDocblockTypeDecorator->decorateGenericIterableReturnType( + $objectTypeArrayType, + $phpDocInfo, + $node + ); if (! $hasChanged) { return null; }