Yih Tsern created GROOVY-10713:
----------------------------------

             Summary: ClassCodeExpressionTransformer ignoring Expressions in 
ClosureExpression.code
                 Key: GROOVY-10713
                 URL: https://issues.apache.org/jira/browse/GROOVY-10713
             Project: Groovy
          Issue Type: Bug
            Reporter: Yih Tsern


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