[ https://issues.apache.org/jira/browse/GROOVY-11633?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17946398#comment-17946398 ]
Paul King edited comment on GROOVY-11633 at 4/25/25 12:19 AM: -------------------------------------------------------------- It is best not to conflate property access in general with modifier issues. The direct access of the field inside the class is well known and well defined. See the "It is worth noting" paragraph in: [https://groovy-lang.org/objectorientation.html#_fields_and_properties] UPDATED: The modifiers for the getter is a valid discussion point. Given that properties are a Groovy thing (albeit related to JavaBeans), it is up to us to define the semantics in all cases. Looking at the previous link, we don't do that for this particular case in Groovy 3. Properties with the final modifier have always been referred to as read-only properties. We state that the field will be final but don't give a definitive answer for the getter in Groovy 3. See comment below for Groovy 4+. Obviously, you can go the long-hand path of explicitly defining the getter, but I would have hoped that at least with split definitions (Groovy 4), we could have supported the two cases of final/non-final getters. But it doesn't seem to work either. I think we could tidy this up. was (Author: paulk): It is best not to conflate property access in general with modifier issues. The direct access of the field inside the class is well known and well defined. See the "It is worth noting" paragraph in: [https://groovy-lang.org/objectorientation.html#_fields_and_properties] UPDATED: The modifiers for the getter is a valid discussion point. Given that properties are a Groovy thing (albeit related to JavaBeans), it is up to us to define the semantics in all cases. Looking at the previous link, we don't do that for this particular case in Groovy 3. Properties with the final modifier have always been referred to as read-only properties. We state that the field will be final but don't give a definitive answer for the getter in Groovy 3. See comment below for Groovy 4+. Obviously, you can go the long-hand path of explicitly defining the getter, but I would have hoped that at least with split definitions, we could have supported the two cases of final/non-final getters. But it doesn't seem to work either. I think we could tidy this up. > 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)