[ 
https://issues.apache.org/jira/browse/GROOVY-10713?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Yih Tsern updated GROOVY-10713:
-------------------------------
    Summary: ClassCodeExpressionTransformer ignoring Expressions within 
ClosureExpression.code  (was: ClassCodeExpressionTransformer ignoring 
Expressions in ClosureExpression.code)

> ClassCodeExpressionTransformer ignoring Expressions within 
> ClosureExpression.code
> ---------------------------------------------------------------------------------
>
>                 Key: GROOVY-10713
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10713
>             Project: Groovy
>          Issue Type: Bug
>            Reporter: Yih Tsern
>            Priority: Minor
>
> E.g.
>  
> {code:java}
> class SomeClass {
>   def someClosureField = {
>       // Expressions are NOT visited by 
> ClassCodeExpressionTransformer.transform(Expression)
>   }
>   
>   def someMethod() {
>     // Expressions are visited by 
> ClassCodeExpressionTransformer.transform(Expression)
>     3.times {
>       // Expressions are NOT visited by 
> ClassCodeExpressionTransformer.transform(Expression)
>     }
>     def someClosureVar = {
>       // Expressions are NOT visited by 
> ClassCodeExpressionTransformer.transform(Expression)
>     }
>   }
> }
> {code}
> Is this current behaviour by design or is it a bug?  If it is by design, it 
> seems to be quite a gotcha (also caused GROOVY-6932 & GROOVY-6434) - probably 
> should be noted in [the 
> doc|https://groovy-lang.org/metaprogramming.html#_classcodeexpressiontransformer]?
>  
> Below is my current workaround(?) - is this the expected way to work with 
> ClassCodeExpressionTransformer?
>  
> {code:java}
> class MyAstTransformer extends ClassCodeExpressionTransformer {
>   Expression transform(Expression expression) {
>     // Some code to deal with specific expression classes...
>     ...
>     
>     if (expression instanceof ClosureExpression) {
>       expression.code.visit(this)
>     }
>     super.transform(expression);
>   }
> }
> {code}
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to