You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2022/08/16 11:49:22 UTC
[groovy] branch master updated: GROOVY-10713 Document ClassCodeExpressionTransformer limitation when dealing with Closure.
This is an automated email from the ASF dual-hosted git repository.
paulk 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 c5b1906928 GROOVY-10713 Document ClassCodeExpressionTransformer limitation when dealing with Closure.
c5b1906928 is described below
commit c5b1906928c7f3f13c3a9aac859de4c80bd4cdad
Author: Yih Tsern <si...@yahoo.com>
AuthorDate: Fri Aug 12 01:34:54 2022 +0800
GROOVY-10713 Document ClassCodeExpressionTransformer limitation when dealing with Closure.
---
.../groovy/ast/ClassCodeExpressionTransformer.java | 23 ++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/src/main/java/org/codehaus/groovy/ast/ClassCodeExpressionTransformer.java b/src/main/java/org/codehaus/groovy/ast/ClassCodeExpressionTransformer.java
index b267210525..af5cfe9b22 100644
--- a/src/main/java/org/codehaus/groovy/ast/ClassCodeExpressionTransformer.java
+++ b/src/main/java/org/codehaus/groovy/ast/ClassCodeExpressionTransformer.java
@@ -42,6 +42,29 @@ import java.util.Map;
*/
public abstract class ClassCodeExpressionTransformer extends ClassCodeVisitorSupport implements ExpressionTransformer {
+ /**
+ * <strong>GOTCHA</strong>: This method does not visit Expressions within Closures, for historical
+ * reason. If you want those Expressions to be visited, you can do this:
+ * <pre>
+ * {@code
+ * public class YourTransformer extends ClassCodeExpressionTransformer {
+ * ...
+ *
+ * @Override
+ * public Expression transform(final Expression expr) {
+ * if (expr instanceof ClosureExpression) {
+ * expr.visit(this);
+ *
+ * return expr;
+ * }
+ *
+ * // ... your custom instanceof + expression transformation
+ * // ...
+ * }
+ * }
+ * }
+ * </pre>
+ */
@Override
public Expression transform(final Expression expr) {
if (expr == null) return null;