2222use Rector \Comments \NodeDocBlock \DocBlockUpdater ;
2323use Rector \DeadCode \NodeAnalyzer \IsClassMethodUsedAnalyzer ;
2424use Rector \NodeTypeResolver \Node \AttributeKey ;
25+ use Rector \PhpParser \Node \BetterNodeFinder ;
2526use Rector \PhpParser \NodeTransformer ;
2627use Rector \PHPStan \ScopeFetcher ;
2728use Rector \PHPUnit \NodeAnalyzer \TestsNodeAnalyzer ;
@@ -45,7 +46,8 @@ public function __construct(
4546 private readonly PhpDocInfoFactory $ phpDocInfoFactory ,
4647 private readonly IsClassMethodUsedAnalyzer $ isClassMethodUsedAnalyzer ,
4748 private readonly PhpDocTypeChanger $ phpDocTypeChanger ,
48- private readonly DocBlockUpdater $ docBlockUpdater
49+ private readonly DocBlockUpdater $ docBlockUpdater ,
50+ private readonly BetterNodeFinder $ betterNodeFinder ,
4951 ) {
5052 }
5153
@@ -130,24 +132,30 @@ private function collectReturnArrayNodesFromClassMethod(ClassMethod $classMethod
130132 return null ;
131133 }
132134
133- $ yieldFromOrReturn = null ;
135+ $ yieldedFromExpr = null ;
134136 foreach ($ classMethod ->stmts as $ statement ) {
135137 if ($ statement instanceof Expression) {
136138 $ statement = $ statement ->expr ;
137139 }
138140
139- if ($ statement instanceof Return_ || $ statement instanceof YieldFrom ) {
141+ if ($ statement instanceof Return_) {
140142 $ returnedExpr = $ statement ->expr ;
141143
142144 if (! $ returnedExpr instanceof Array_) {
143145 return null ;
144146 }
145147
146- if ($ yieldFromOrReturn instanceof Array_) {
148+ return $ returnedExpr ;
149+ } elseif ($ statement instanceof YieldFrom) {
150+ if (! $ statement ->expr instanceof Array_) {
147151 return null ;
148152 }
149153
150- $ yieldFromOrReturn = $ returnedExpr ;
154+ if ($ yieldedFromExpr !== null ) {
155+ return null ;
156+ }
157+
158+ $ yieldedFromExpr = $ statement ->expr ;
151159 } elseif (
152160 ! $ statement instanceof Assign
153161 && ! $ statement instanceof AssignRef
@@ -157,7 +165,7 @@ private function collectReturnArrayNodesFromClassMethod(ClassMethod $classMethod
157165 }
158166 }
159167
160- return $ yieldFromOrReturn ;
168+ return $ yieldedFromExpr ;
161169 }
162170
163171 private function transformArrayToYieldsOnMethodNode (ClassMethod $ classMethod , Array_ $ array ): void
0 commit comments