This is an automated email from the ASF dual-hosted git repository. sunlan pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push: new 8b22dd4180 Trivial refactor: eliminate duplicated code 8b22dd4180 is described below commit 8b22dd418079bad79c207742046ae35b6f38d17a Author: Daniel Sun <sun...@apache.org> AuthorDate: Sun Jun 1 01:38:30 2025 +0900 Trivial refactor: eliminate duplicated code --- .../tailrec/TailRecursiveASTTransformation.java | 38 +++++++++------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/codehaus/groovy/transform/tailrec/TailRecursiveASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/tailrec/TailRecursiveASTTransformation.java index 18846ff7c5..7140697bef 100644 --- a/src/main/java/org/codehaus/groovy/transform/tailrec/TailRecursiveASTTransformation.java +++ b/src/main/java/org/codehaus/groovy/transform/tailrec/TailRecursiveASTTransformation.java @@ -203,19 +203,8 @@ public class TailRecursiveASTTransformation extends AbstractASTTransformation { private void replaceRecursiveReturnsOutsideClosures(final MethodNode method, final Map<Integer, Map<String, Object>> positionMapping) { Closure<Boolean> whenRecursiveReturn = new Closure<Boolean>(this, this) { public Boolean doCall(Statement statement, boolean inClosure) { - if (inClosure) return false; - if (!(statement instanceof ReturnStatement)) { - return false; - } - - Expression inner = ((ReturnStatement) statement).getExpression(); - if (!(inner instanceof MethodCallExpression) && !(inner instanceof StaticMethodCallExpression)) { - return false; - } - - return isRecursiveIn(inner, method); + return !inClosure && isRecursiveReturnStatement(statement, method); } - }; Closure<Statement> replaceWithContinueBlock = new Closure<Statement>(this, this) { public Statement doCall(ReturnStatement statement) { @@ -226,21 +215,24 @@ public class TailRecursiveASTTransformation extends AbstractASTTransformation { replacer.replaceIn(method.getCode()); } + private boolean isRecursiveReturnStatement(Statement statement, MethodNode method) { + if (!(statement instanceof ReturnStatement)) { + return false; + } + + Expression inner = ((ReturnStatement) statement).getExpression(); + if (!(inner instanceof MethodCallExpression) && !(inner instanceof StaticMethodCallExpression)) { + return false; + } + + return isRecursiveIn(inner, method); + } + @SuppressWarnings("Instanceof") private void replaceRecursiveReturnsInsideClosures(final MethodNode method, final Map<Integer, Map<String, Object>> positionMapping) { Closure<Boolean> whenRecursiveReturn = new Closure<Boolean>(this, this) { public Boolean doCall(Statement statement, boolean inClosure) { - if (!inClosure) return false; - if (!(statement instanceof ReturnStatement)) { - return false; - } - - Expression inner = ((ReturnStatement) statement).getExpression(); - if (!(inner instanceof MethodCallExpression) && !(inner instanceof StaticMethodCallExpression)) { - return false; - } - - return isRecursiveIn(inner, method); + return inClosure && isRecursiveReturnStatement(statement, method); } }; Closure<Statement> replaceWithThrowLoopException = new Closure<Statement>(this, this) {