This is an automated email from the ASF dual-hosted git repository. sunlan pushed a commit to branch GROOVY_4_0_X in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_4_0_X by this push: new 0fbe99512f Trivial refactor: eliminate duplicated code 0fbe99512f is described below commit 0fbe99512f98a4fa89985e54e1c1dfa0f995e228 Author: Daniel Sun <sun...@apache.org> AuthorDate: Sun Jun 1 01:38:30 2025 +0900 Trivial refactor: eliminate duplicated code (cherry picked from commit 8b22dd418079bad79c207742046ae35b6f38d17a) --- .../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 721f7b2597..f1a0f21953 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) {