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 <[email protected]>
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) {