99use PhpParser \Node \Stmt \ClassMethod ;
1010use PhpParser \Node \Stmt \Function_ ;
1111use PhpParser \Node \Stmt \Return_ ;
12- use PHPStan \PhpDocParser \Ast \PhpDoc \ReturnTagValueNode ;
1312use PHPStan \Type \Constant \ConstantArrayType ;
1413use Rector \BetterPhpDocParser \PhpDocInfo \PhpDocInfoFactory ;
15- use Rector \Comments \ NodeDocBlock \ DocBlockUpdater ;
14+ use Rector \BetterPhpDocParser \ PhpDocManipulator \ PhpDocTypeChanger ;
1615use Rector \Rector \AbstractRector ;
1716use Rector \TypeDeclarationDocblocks \NodeFinder \ReturnNodeFinder ;
17+ use Rector \TypeDeclarationDocblocks \TagNodeAnalyzer \UsefulArrayTagNodeAnalyzer ;
1818use Rector \TypeDeclarationDocblocks \TypeResolver \ConstantArrayTypeGeneralizer ;
1919use Symplify \RuleDocGenerator \ValueObject \CodeSample \CodeSample ;
2020use Symplify \RuleDocGenerator \ValueObject \RuleDefinition ;
@@ -26,9 +26,10 @@ final class DocblockReturnArrayFromDirectArrayInstanceRector extends AbstractRec
2626{
2727 public function __construct (
2828 private readonly PhpDocInfoFactory $ phpDocInfoFactory ,
29- private readonly DocBlockUpdater $ docBlockUpdater ,
29+ private readonly PhpDocTypeChanger $ phpDocTypeChanger ,
3030 private readonly ConstantArrayTypeGeneralizer $ constantArrayTypeGeneralizer ,
3131 private readonly ReturnNodeFinder $ returnNodeFinder ,
32+ private readonly UsefulArrayTagNodeAnalyzer $ usefulArrayTagNodeAnalyzer
3233 ) {
3334 }
3435
@@ -80,14 +81,13 @@ public function getItems(): array
8081 */
8182 public function refactor (Node $ node ): ?Node
8283 {
83- $ phpDocInfo = $ this ->phpDocInfoFactory ->createFromNodeOrEmpty ($ node );
84-
85- // return tag is already given
86- if ($ phpDocInfo ->getReturnTagValue () instanceof ReturnTagValueNode) {
84+ if ($ node ->stmts === null ) {
8785 return null ;
8886 }
8987
90- if ($ node ->stmts === null ) {
88+ $ phpDocInfo = $ this ->phpDocInfoFactory ->createFromNodeOrEmpty ($ node );
89+
90+ if ($ this ->usefulArrayTagNodeAnalyzer ->isUsefulArrayTag ($ phpDocInfo ->getReturnTagValue ())) {
9191 return null ;
9292 }
9393
@@ -107,11 +107,7 @@ public function refactor(Node $node): ?Node
107107 }
108108
109109 $ genericTypeNode = $ this ->constantArrayTypeGeneralizer ->generalize ($ returnedType );
110-
111- $ returnTagValueNode = new ReturnTagValueNode ($ genericTypeNode , '' );
112- $ phpDocInfo ->addTagValueNode ($ returnTagValueNode );
113-
114- $ this ->docBlockUpdater ->updateRefactoredNodeWithPhpDocInfo ($ node );
110+ $ this ->phpDocTypeChanger ->changeReturnTypeNode ($ node , $ phpDocInfo , $ genericTypeNode );
115111
116112 return $ node ;
117113 }
0 commit comments