groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Paolo Di Tommaso <paolo.ditomm...@gmail.com>
Subject Re: AST to replace `==` with `equals` method invocation
Date Sat, 16 Jun 2018 17:52:08 GMT
Thanks Mario,

Looking at Asteroid code put me in the right direction. In a nutshell it is
not possible to mix ClassCodeVisitorSupport logic with class
ClassCodeExpressionTransformer
one. I need to use two different classes.


p

On Wed, Jun 13, 2018 at 9:52 AM, Mario Garcia <mario.ggar@gmail.com> wrote:

> Hi Paolo:
>
> A couple of years ago I created Asteroid (https://github.com/grooviter/
> asteroid) a library to deal with AST transformations. I needed to create
> a minor release so I've taken the oportunity to solve this problem and I
> think is pretty easy.
>
>    - Create a Transformer. A transformer is just a class transforming a
>    specific type of node, and it uses a criteria to filter nodes.
>    - Create a Global transformation that includes the previous
>    transformer to apply it to the whole codebase
>    - Test that the AST generated has changed from a BinaryExpression to a
>    MethodCallExpression
>    - Profit :)
>
> You can find the source code here:
>
>    - Transformer: https://github.com/grooviter/asteroid/blob/
>    master/asteroid-test/src/main/groovy/asteroid/global/samples/
>    ChangeEqualsTransformer.groovy
>    <https://github.com/grooviter/asteroid/blob/master/asteroid-test/src/main/groovy/asteroid/global/samples/ChangeEqualsTransformer.groovy>
>
>    - Transformation: https://github.com/grooviter/asteroid/
>    blob/master/asteroid-test/src/main/groovy/asteroid/global/samples/
>    ChangeEqualsTransformation.groovy
>    <https://github.com/grooviter/asteroid/blob/master/asteroid-test/src/main/groovy/asteroid/global/samples/ChangeEqualsTransformation.groovy>
>    - Test: https://github.com/grooviter/asteroid/blob/
>    master/asteroid-test/src/test/groovy/asteroid/global/samples/
>    ChangeEqualsTransformationSpec.groovy
>    <https://github.com/grooviter/asteroid/blob/master/asteroid-test/src/test/groovy/asteroid/global/samples/ChangeEqualsTransformationSpec.groovy>
>
> You can find also some documentation at: http://grooviter.github.
> io/asteroid/
>
> Of course any feedback on the library is appreciated :)
>
> I hope this helps
> Mario
>
> 2018-06-10 21:27 GMT+02:00 MG <mgbiz@arscreat.com>:
>
>> Hi Paolo,
>>
>> I have not used it myself, but have you had a look at the new Groovy 2.5
>> "abstract syntax tree search and replace"-feature (
>> http://groovy-lang.org/releasenotes/groovy-2.5.html & search for "AST
>> matching") ?
>>
>> Cheers,
>> mg
>>
>>
>>
>> On 10.06.2018 16:55, Paolo Di Tommaso wrote:
>>
>> Dear all,
>>
>> I'm trying to implement an AST transformation to replace any `==` binary
>> expression with a equals method call invocation as suggested here
>> <https://stackoverflow.com/questions/28355773/in-groovy-why-does-the-behaviour-of-change-for-interfaces-extending-compar#comment45123447_28387391>
>> .
>>
>>
>> My understanding is that it's required to override each the visitor for
>> each node where a binary expression can appear ie. if statement, while
>> statement, assignment, for loop, method call, etc.
>>
>> That looks a bit overkill. I was wondering if there's a better way to
>> replace globally all `==` binary expressions with `equals` method
>> invocations.
>>
>>
>> Cheers,
>> Paolo
>>
>>
>>
>

Mime
View raw message