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

Reply via email to