@@ -203,19 +203,8 @@ private void replaceAllRecursiveReturnsWithIteration(MethodNode method, Map posi
203
203
private void replaceRecursiveReturnsOutsideClosures (final MethodNode method , final Map <Integer , Map <String , Object >> positionMapping ) {
204
204
Closure <Boolean > whenRecursiveReturn = new Closure <Boolean >(this , this ) {
205
205
public Boolean doCall (Statement statement , boolean inClosure ) {
206
- if (inClosure ) return false ;
207
- if (!(statement instanceof ReturnStatement )) {
208
- return false ;
209
- }
210
-
211
- Expression inner = ((ReturnStatement ) statement ).getExpression ();
212
- if (!(inner instanceof MethodCallExpression ) && !(inner instanceof StaticMethodCallExpression )) {
213
- return false ;
214
- }
215
-
216
- return isRecursiveIn (inner , method );
206
+ return !inClosure && isRecursiveReturnStatement (statement , method );
217
207
}
218
-
219
208
};
220
209
Closure <Statement > replaceWithContinueBlock = new Closure <Statement >(this , this ) {
221
210
public Statement doCall (ReturnStatement statement ) {
@@ -226,21 +215,24 @@ public Statement doCall(ReturnStatement statement) {
226
215
replacer .replaceIn (method .getCode ());
227
216
}
228
217
218
+ private boolean isRecursiveReturnStatement (Statement statement , MethodNode method ) {
219
+ if (!(statement instanceof ReturnStatement )) {
220
+ return false ;
221
+ }
222
+
223
+ Expression inner = ((ReturnStatement ) statement ).getExpression ();
224
+ if (!(inner instanceof MethodCallExpression ) && !(inner instanceof StaticMethodCallExpression )) {
225
+ return false ;
226
+ }
227
+
228
+ return isRecursiveIn (inner , method );
229
+ }
230
+
229
231
@ SuppressWarnings ("Instanceof" )
230
232
private void replaceRecursiveReturnsInsideClosures (final MethodNode method , final Map <Integer , Map <String , Object >> positionMapping ) {
231
233
Closure <Boolean > whenRecursiveReturn = new Closure <Boolean >(this , this ) {
232
234
public Boolean doCall (Statement statement , boolean inClosure ) {
233
- if (!inClosure ) return false ;
234
- if (!(statement instanceof ReturnStatement )) {
235
- return false ;
236
- }
237
-
238
- Expression inner = ((ReturnStatement ) statement ).getExpression ();
239
- if (!(inner instanceof MethodCallExpression ) && !(inner instanceof StaticMethodCallExpression )) {
240
- return false ;
241
- }
242
-
243
- return isRecursiveIn (inner , method );
235
+ return inClosure && isRecursiveReturnStatement (statement , method );
244
236
}
245
237
};
246
238
Closure <Statement > replaceWithThrowLoopException = new Closure <Statement >(this , this ) {
0 commit comments