RFR: 8375588: Enhanced property metadata [v4]
Michael Strauß
mstrauss at openjdk.org
Thu Jan 22 16:53:09 UTC 2026
> 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.
Michael Strauß has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains five additional commits since the last revision:
- Merge branch 'master' into feature/property-metadata
- review changes
- ReadOnlyProperty.getDeclaringClass() tests
- doc
- Enhanced property metadata
-------------
Changes:
- all: https://git.openjdk.org/jfx/pull/2015/files
- new: https://git.openjdk.org/jfx/pull/2015/files/1c624728..c1f8559a
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jfx&pr=2015&range=03
- incr: https://webrevs.openjdk.org/?repo=jfx&pr=2015&range=02-03
Stats: 506378 lines in 9017 files changed: 254550 ins; 188992 del; 62836 mod
Patch: https://git.openjdk.org/jfx/pull/2015.diff
Fetch: git fetch https://git.openjdk.org/jfx.git pull/2015/head:pull/2015
PR: https://git.openjdk.org/jfx/pull/2015
More information about the openjfx-dev
mailing list