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) {

Reply via email to