You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (Jira)" <ji...@apache.org> on 2023/02/10 21:40:00 UTC

[jira] [Closed] (GROOVY-10704) Random order of TraitBridge methods breaks cachability

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

Paul King closed GROOVY-10704.
------------------------------

> Random order of TraitBridge methods breaks cachability
> ------------------------------------------------------
>
>                 Key: GROOVY-10704
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10704
>             Project: Groovy
>          Issue Type: Bug
>          Components: bytecode
>    Affects Versions: 3.0.7
>            Reporter: Vladimír Oraný
>            Assignee: Paul King
>            Priority: Major
>             Fix For: 4.0.5, 3.0.13
>
>         Attachments: Snímek obrazovky 2022-07-25 v 7.23.20.png
>
>
> The build tools such as Gradle compares the class files and JARs containing them to determine if there is a need of recompiling the projects. Any randomness in generated classes breaks the cachablity.
> It seems to me that the order of methods generated from traits is not deterministic therefore compiling the same source code generates different class file. This can be observed for example with Grails entities.
> 1. generate a fresh Grails project {{curl -O [https://start.grails.org/myapp.zip]}}
> 2. unzip the project
> 3. create a Groovy entity inside {{myapp/grails-app/domain/myapp/Person.groovy}}
> {code:groovy}
> class Person {
>     String name
>     Integer age
>     Date lastVisit
> }
> {code}
> 4. compile the project {{./grailsw clean classes}}
> 5. save the content of compiled class file in {{build/classes/groovy/main/myapp/Person.class}}
> 6. recompile the project {{./grailsw clean classes}}
> 7. compare the regenerated class file with the original one {{build/classes/groovy/main/myapp/Person.class}}
> You may need to repeat the step 6 and 7 couple of times but eventually you will see there is a difference in the order of the methods annotated with {{{}@TraitBridge{}}}.
>  
> !Snímek obrazovky 2022-07-25 v 7.23.20.png!



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