On Fri, 19 Dec 2025 20:56:27 GMT, Michael Strauß <[email protected]> wrote:

> Implementation of [enhanced property 
> metadata](https://gist.github.com/mstr2/2fec0303fc440b8eaeb126befc76eb5c).
> 
> ### New API
> This PR includes the following API additions:
> 
> 1. `ReadOnlyProperty.getDeclaringClass()` and its default implementation.
> 2. The `javafx.beans.property.AttachedProperty` interface.
> 3. New constructors for all `Simple<*>Property` and `ReadOnly<*>Wrapper` 
> classes, accepting the declaring class of the property.
> 
> The declaring class is stored in a new field in the `Simple<*>Property` 
> classes. If a legacy constructor is used that doesn't specify the declaring 
> class, the `ReadOnlyProperty.getDeclaringClass()` default implementation is 
> called the first time the `Simple<*>Property.getDeclaringClass()` method is 
> called, and its result is stored for future retrieval.
> 
> ### Testing
> For testing, this PR also includes the 
> `test.util.property.PropertyMetadataVerifier` tool. It systematically tests 
> all public and protected properties of a class, and ensures conformance to 
> the following rules:
> * `ReadOnlyProperty.getBean()` returns the object instance of the enclosing 
> class, or the target object instance if the property is an attached property.
> *  `ReadOnlyProperty.getName()` returns the name of the property, which must 
> correspond to the name of the property getter (excluding the word "Property").
> * `ReadOnlyProperty.getDeclaringClass()` returns the enclosing class of the 
> property getter.
> * The declaring class of a `Simple<*>Property` or `ReadOnly<*>Wrapper` must 
> be specified in the constructor, not resolved at runtime.
> * `getBean()`, `getName()`, and `getDeclaringClass()` must not be overridden 
> in subclasses of `Simple<*>Property` or `ReadOnly<*>Wrapper`.
> * An instance property does not implement `AttachedProperty`.
> * An instance property has a parameterless property getter.
> * An attached property implements `AttachedProperty`.
> * An attached property has a static single-argument property getter that 
> accepts the target object.
> * `AttachedProperty.getTargetClass()` returns the class of the single 
> parameter of the static property getter.
> * A property getter does not return an instance of `ReadOnly<*>Wrapper`, it 
> returns the result of calling `ReadOnly<*>Wrapper.getReadOnlyProperty()`.
> 
> Many properties in existing JavaFX classes violate the 
> `PropertyMetadataVerifier` rules in some way or shape. This PR won't address 
> these issues, this will be done in a future cleanup PR.

Not going away - possibly.  But it does not change the fact that these 
properties are stored in the wrong place.  Adding some sort of band-aid code to 
help with some use cases seems a bit wrong to me.  It does not mean that we 
don't have the actual problem.

Perhaps you could describe a couple of use cases where the new API would shine, 
use cases where it is impossible to achieve the goal using the existing APIs.

-------------

PR Comment: https://git.openjdk.org/jfx/pull/2015#issuecomment-3774684544

Reply via email to