[
https://issues.apache.org/jira/browse/GROOVY-10004?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Paul King resolved GROOVY-10004.
--------------------------------
Fix Version/s: 4.0.0-alpha-3
Resolution: Fixed
Proposed PR merged. Currently synthetic accessor methods are ignored if found.
This is an escape clause which leaves wiggle room for AST transforms at the
risk of a poorer error message if an AST transform does the wrong thing -
either some kind of Groovy warning about duplication or in the worst case, a VM
class error. The escape clause was currently needed for @Field. We could
consider weakening or removing the escape clause down the track:
* A more liberal escape clause would be to also ignore @Generated accessor
methods if found, something to keep in mind if other frameworks end up being
affected
* We could remove the escape clause if we rework @Field but maybe other
frameworks would also be impacted and need this wiggle room anyway
> @Lazy transform should check for explicit getters/setters
> ---------------------------------------------------------
>
> Key: GROOVY-10004
> URL: https://issues.apache.org/jira/browse/GROOVY-10004
> Project: Groovy
> Issue Type: Improvement
> Reporter: Paul King
> Assignee: Paul King
> Priority: Minor
> Labels: breaking
> Fix For: 4.0.0-alpha-3
>
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> The {{@Lazy}} transform renames the backing field to "make it more hidden"
> and doesn't provide a setter, hence making the field read-only (apart from
> reflection tricks).
> {code}
> class Zoo {
> @Lazy String animal = { 'sloth' }()
> //void setAnimal(String animal) { this.animal = animal }
> //String getAnimal() { this.animal }
> }
> {code}
> Here {{animal}} becomes {{$animal}}. The intention is to disallow the fields
> use anymore apart from the sanctioned initialization code provided by the
> transform. No attempt is made to rename usages of the field that may
> otherwise occur within the class. Hence adding an explicit getter or setter
> in the normal way yields a {{StackOverflowError}} when trying to access the
> original property or {{MissingFieldException}} if trying to access the field
> directly, i.e. {{this.@animal}}. The transform should instead issue an error
> if explicit getters/setters are found. It would still be possible to access
> the {{$animal}} field (which in general may or may not be initialized) if
> there was really a need, just not in the standard getter or setter.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)