@@ -74,7 +74,7 @@ public function getNodeTypes(): array
7474 */
7575 public function refactor (Node $ node ): ?array
7676 {
77- if ($ this ->doesLastStatementBreakFlow ($ node )) {
77+ if ($ this ->doesNotLastStatementBreakFlow ($ node )) {
7878 return null ;
7979 }
8080
@@ -108,7 +108,7 @@ private function handleElseIfs(If_ $if): array
108108 $ currentElseIf = array_shift ($ if ->elseifs );
109109
110110 // If the last statement in the `elseif` breaks flow, merge it into the original `if` and stop processing
111- if ($ this ->doesLastStatementBreakFlow ($ currentElseIf )) {
111+ if ($ this ->doesNotLastStatementBreakFlow ($ currentElseIf )) {
112112 $ this ->updateIfWithElseIf ($ if , $ currentElseIf );
113113 $ nodesToReturn = [...$ nodesToReturn , $ if , ...$ this ->getStatementsElseIfs ($ if )];
114114
@@ -130,7 +130,18 @@ private function handleElseIfs(If_ $if): array
130130 }
131131
132132 if ($ originalIf ->else instanceof Else_) {
133- $ nodesToReturn [] = $ originalIf ->else ;
133+ $ mergeStmts = true ;
134+ foreach ($ nodesToReturn as $ nodeToReturn ) {
135+ if ($ this ->doesNotLastStatementBreakFlow ($ nodeToReturn )) {
136+ $ nodesToReturn [] = $ originalIf ->else ;
137+ $ mergeStmts = false ;
138+ break ;
139+ }
140+ }
141+
142+ if ($ mergeStmts ) {
143+ $ nodesToReturn = array_merge ($ nodesToReturn , $ originalIf ->else ->stmts );
144+ }
134145 }
135146
136147 return $ nodesToReturn ;
@@ -143,7 +154,7 @@ private function getStatementsElseIfs(If_ $if): array
143154 {
144155 $ statements = [];
145156 foreach ($ if ->elseifs as $ key => $ elseif ) {
146- if ($ this ->doesLastStatementBreakFlow ($ elseif ) && $ elseif ->stmts !== []) {
157+ if ($ this ->doesNotLastStatementBreakFlow ($ elseif ) && $ elseif ->stmts !== []) {
147158 continue ;
148159 }
149160
@@ -154,17 +165,17 @@ private function getStatementsElseIfs(If_ $if): array
154165 return $ statements ;
155166 }
156167
157- private function doesLastStatementBreakFlow (If_ | ElseIf_ | Else_ $ node ): bool
168+ private function doesNotLastStatementBreakFlow (If_ | ElseIf_ | Else_ $ node ): bool
158169 {
159170 $ lastStmt = end ($ node ->stmts );
160171
161172 if ($ lastStmt instanceof If_ && $ lastStmt ->else instanceof Else_) {
162- if ($ this ->doesLastStatementBreakFlow ($ lastStmt ) || $ this ->doesLastStatementBreakFlow ($ lastStmt ->else )) {
173+ if ($ this ->doesNotLastStatementBreakFlow ($ lastStmt ) || $ this ->doesNotLastStatementBreakFlow ($ lastStmt ->else )) {
163174 return true ;
164175 }
165176
166177 foreach ($ lastStmt ->elseifs as $ elseIf ) {
167- if ($ this ->doesLastStatementBreakFlow ($ elseIf )) {
178+ if ($ this ->doesNotLastStatementBreakFlow ($ elseIf )) {
168179 return true ;
169180 }
170181 }
0 commit comments