[ 
https://issues.apache.org/jira/browse/GROOVY-11633?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17946276#comment-17946276
 ] 

Octavia Togami commented on GROOVY-11633:
-----------------------------------------

The class itself does not use the getter to access the field, so it is 
effectively `final` inside the class but can appear different outside the 
class. If it were changed so that that the class did call the getter instead, 
that would be fine by me, but currently it's inconsistent what you'll get when 
you say `.foo` from outside vs. inside the class for a simple field. This 
applies even to non-private fields which can be particularly confusing. In the 
reproducer I gave, `foo` inside the class will be `0`, but accessing it outside 
the class will give `5`.

> final fields no longer produce final getters
> --------------------------------------------
>
>                 Key: GROOVY-11633
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11633
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler
>    Affects Versions: 4.0.24, 4.0.25, 4.0.26
>            Reporter: Octavia Togami
>            Assignee: Eric Milles
>            Priority: Major
>         Attachments: FinalProp.groovy
>
>
> In Groovy 3 and versions of Groovy 4 at or before 4.0.23, a `final` field 
> would also produce a `final` getter. Due to changes made in 
> https://github.com/apache/groovy/commit/88c6336021f71d702da5292aeaac9e9859aeab1a
>  (discovered via `git bisect`), 4.0.24 and onwards now produce a non-`final` 
> getter, which allows overriding of the method. A reproducer which should fail 
> to compile if the issue is fixed is attached.
> This has a minor affect on Gradle's upgrade to Groovy 4, where some 
> properties won't properly attach to their owning object and produce worse 
> error messages.



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

Reply via email to