1818use PHPStan \Type \Type ;
1919use PHPStan \Type \UnionType ;
2020use Rector \BetterPhpDocParser \PhpDocInfo \PhpDocInfoFactory ;
21- use Rector \BetterPhpDocParser \PhpDocManipulator \PhpDocTypeChanger ;
2221use Rector \Rector \AbstractRector ;
2322use Rector \StaticTypeMapper \ValueObject \Type \FullyQualifiedObjectType ;
23+ use Rector \TypeDeclarationDocblocks \NodeDocblockTypeDecorator ;
2424use Rector \TypeDeclarationDocblocks \NodeFinder \ReturnNodeFinder ;
25+ use Rector \TypeDeclarationDocblocks \TagNodeAnalyzer \UsefulArrayTagNodeAnalyzer ;
2526use Symplify \RuleDocGenerator \ValueObject \CodeSample \CodeSample ;
2627use Symplify \RuleDocGenerator \ValueObject \RuleDefinition ;
2728
@@ -34,7 +35,8 @@ public function __construct(
3435 private readonly PhpDocInfoFactory $ phpDocInfoFactory ,
3536 private readonly ReturnNodeFinder $ returnNodeFinder ,
3637 private readonly ReflectionProvider $ reflectionProvider ,
37- private readonly PhpDocTypeChanger $ phpDocTypeChanger
38+ private readonly UsefulArrayTagNodeAnalyzer $ usefulArrayTagNodeAnalyzer ,
39+ private readonly NodeDocblockTypeDecorator $ nodeDocblockTypeDecorator
3840 ) {
3941 }
4042
@@ -108,9 +110,7 @@ public function getNodeTypes(): array
108110 public function refactor (Node $ node ): ?Node
109111 {
110112 $ phpDocInfo = $ this ->phpDocInfoFactory ->createFromNodeOrEmpty ($ node );
111- $ returnType = $ phpDocInfo ->getReturnType ();
112-
113- if ($ returnType instanceof ArrayType && ! $ returnType ->getItemType () instanceof MixedType) {
113+ if ($ this ->usefulArrayTagNodeAnalyzer ->isUsefulArrayTag ($ phpDocInfo ->getReturnTagValue ())) {
114114 return null ;
115115 }
116116
@@ -176,7 +176,11 @@ public function refactor(Node $node): ?Node
176176 new FullyQualifiedObjectType ($ firstSharedType )
177177 );
178178
179- $ hasChanged = $ this ->phpDocTypeChanger ->changeReturnType ($ node , $ phpDocInfo , $ objectTypeArrayType );
179+ $ hasChanged = $ this ->nodeDocblockTypeDecorator ->decorateGenericIterableReturnType (
180+ $ objectTypeArrayType ,
181+ $ phpDocInfo ,
182+ $ node
183+ );
180184 if (! $ hasChanged ) {
181185 return null ;
182186 }
0 commit comments