If I was trying to do something here's an idea or two
(please don't feel any pressure to implement this, I'm just thinking out loud):

How properties are implemented is from two sources: beans and simple non-voids.
When the logic of both is being applied, then it's not a surprise that there 
are some strange interactions.
If I could enable them separately, then I could turn off bean properties on 
records and have it work as I hoped.

Otherwise perhaps I would need to have a backwards compatibility mode which is 
only enabled when using the default values.
Or perhaps a setting which said whether beans or simple non-voids take 
precedence.

I'm more than happy with the status quo; a few rough edges aren't the end of 
the world.
I very much appreciate the effort you've already put in and what's been done is 
a huge improvement.

Thank you so much,
Simon




On Sunday, 31 March 2024 at 02:05:32 BST, Daniel Dekany 
<daniel.dek...@gmail.com> wrote: 





Yeah, it is confusing/complicated if somebody digs into it. So you
have `boolean isAccessible()` in a record. Because it's in a record,
it's a good question what the intent of the author was (plus, now that
the Java language makers make a mess, people will start using the same
pattern in all kind of classes, randomly mixed with old-style
getters). Like maybe it looks as a Java Beans property read method
only accidentally, and they want this property-like thing to be called
"isAccessible". But I think the most likely, by far, is that the
authors are just confused about what the convention now is. Also,
Java's java.beans.Introspector tells us that that's what it is: a Java
Beans property called "accessible". FreeMarker doesn't try to guess if
from the name. Also, this happens to be the most backward compatible
behavior too.

The end result is as below.

These will work:
myRecord.accessible - boolean value, because it's a Java Beans
property called "accessible"
myRecord.isAccessible() - which returns boolean, because a such a
public method exists in Java, and therefore people expect it to work
like in Java.

This doesn't work:
myRecord.accessible() - because there's no such method in Java, so it
would be quite absurd
myRecord.isAccessible - is not a boolean value, but a method, because
that's how it always was with JavaBean property read methods.

And then, you say, maybe myRecord.isAccessible should also be a
boolean? I don't know... It's more backward incompatibility risk for
sure.

Also, note that if something is related to JavaBean properties, the
ZeroArgumentNonVoidMethodPolicy doesn't apply. We decided that it's a
JavaBean property read method, and end of story.

That the ZeroArgumentNonVoidMethodPolicy name doesn't convey the exact
meaning is true. Not sure what a better name could be though, that's
not comically long.

On Sat, Mar 30, 2024 at 1:11 AM Simon Hartley
<scrhart...@yahoo.co.uk.invalid> wrote:
>
> Similarly, for a record with a field (component) called isActive,
> its property name is currently "active" and not "isActive".
> Additionally, this exposed property is callable as a method even when the 
> setting is PROPERTY_ONLY,
> due to it being considered a bean property and not a record property.
>
> Is this the compromise we're making and something we'll live with,
> or should we add more complexity so that this doesn't always apply?
>
>
>
> On Friday, 29 March 2024 at 23:29:31 GMT, Simon Hartley 
> <scrhart...@yahoo.co.uk.invalid> wrote:
>
>
>
> I've worked out what my confusion was:
>
> I was setting it to METHOD_ONLY and then becoming confused that the bean get 
> method still worked as a property.
> Of course, this setting only affects zero-argument non-void methods which 
> ALSO aren't bean getter methods.
>
> I think that means that if a class was using non-bean style and has a field 
> called isActive,
> then if you create a method for it called isActive, then its property name is 
> "active", not "isActive"
> (even when set to BOTH_PROPERTY_AND_METHOD or PROPERTY_ONLY).
> i.e. It's not exposed as both "active" (from the bean property syntax) and 
> "isActive" (from the non-bean style).
>
> I hope that's right and all as intended!
>
> Cheers,
> Simon




-- 
Best regards,
Daniel Dekany

Reply via email to