> On 26 Jun 2020, at 17:46, Daniil Ovchinnikov > <[email protected]> wrote: >> when located within "getX()", "isX()" or "setX()" > I think the meaning of an expression must not depend on the context.
Note currently it does, actually :) Based on context, in today's Groovy, this.foo might be compiled either as this.getFoo() or as this.@foo — which I argue is wrong and should be cleaned up :) IMO, this.foo should be always compiled as this.getFoo(). If someone wants this.@foo, it is really very easy to write the one small '@'. And it is intention-revealing and makes it the code intuitively understandable, which are very good traits. Alas, by definition, it would be a breaking change :( I don't see a better solution than the aforementioned compiler switch or an annotation or something like that, which is definitely very ugly thing — but perhaps still a bit less ugly than all the other options. All the best, OC >> On 26 Jun 2020, at 18:36, Milles, Eric (TR Tech, Content & Ops) >> <[email protected]> wrote: >> >> If we were to change the interpretation of "this" and "super" for property >> expressions, would it be reasonable to let "x" and "this.x" still mean >> direct field access when located within "getX()", "isX()" or "setX()"? I do >> understand the potential for big trouble if "this" handling was changed. I >> thought "super" was more clear, but I am quite concerned that any change in >> the property handling could be a breaking change for someone's code base. >> >> -----Original Message----- >> From: Jochen Theodorou <[email protected]> >> Sent: Friday, June 26, 2020 10:21 AM >> To: [email protected] >> Subject: Re: "super" object expression for attribute, property, and method >> call >> >> On 26.06.20 16:04, OCsite wrote: >>> Hi there, >>> >>> note please that IMO, /this.foo/ definitely should go through the >>> /getFoo/ getter if there's one; that is does not happen currently I >>> regard as a pretty grave bug, for it breaks encapsulation. Compare >>> please e.g. >> >> the counter example is always: >> >> public class X { >> private String foo; >> public String getFoo(){ return this.foo; } >> public void setFoo(String foo){ this.foo = foo; } } >> >> This works perfectly fine in Java and would lead to a stack overflow in >> Groovy as soon as you call the getter or setter. Since it is quite common we >> have a problem here. >> >> bye Jochen >
