Skip to content

Commit 8b22dd4

Browse files
committed
Trivial refactor: eliminate duplicated code
1 parent 71709ed commit 8b22dd4

File tree

1 file changed

+15
-23
lines changed

1 file changed

+15
-23
lines changed

src/main/java/org/codehaus/groovy/transform/tailrec/TailRecursiveASTTransformation.java

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -203,19 +203,8 @@ private void replaceAllRecursiveReturnsWithIteration(MethodNode method, Map posi
203203
private void replaceRecursiveReturnsOutsideClosures(final MethodNode method, final Map<Integer, Map<String, Object>> positionMapping) {
204204
Closure<Boolean> whenRecursiveReturn = new Closure<Boolean>(this, this) {
205205
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);
217207
}
218-
219208
};
220209
Closure<Statement> replaceWithContinueBlock = new Closure<Statement>(this, this) {
221210
public Statement doCall(ReturnStatement statement) {
@@ -226,21 +215,24 @@ public Statement doCall(ReturnStatement statement) {
226215
replacer.replaceIn(method.getCode());
227216
}
228217

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+
229231
@SuppressWarnings("Instanceof")
230232
private void replaceRecursiveReturnsInsideClosures(final MethodNode method, final Map<Integer, Map<String, Object>> positionMapping) {
231233
Closure<Boolean> whenRecursiveReturn = new Closure<Boolean>(this, this) {
232234
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);
244236
}
245237
};
246238
Closure<Statement> replaceWithThrowLoopException = new Closure<Statement>(this, this) {

0 commit comments

Comments
 (0)