This PR creates a WeakReferenceWrapper object to replace direct uses of WeakReference in controls where the referent is a user-supplied object of an unknown type.
As noted in JEP 401, which is now integrated into JDK 28, "The garbage collection APIs in java.lang.ref ... do not allow developers to manually manage value objects in the heap. Attempts to create Reference objects for value objects throw IdentityException at run time." Several core JDK classes such as all of the primitive wrappers (e.g., `Integer`, `Character`), `Optional`, `LocalDateTime`, and a few others are now value types if JDK 28 is run with the `--enable-preview` option. The `ListView`, `ComboBox`, `TableView`, and `TreeTableView` controls take a parameterized item type and hold items of that type. The following places in the implementation create weak references to an item. If that item type is a value class -- meaning that it does not have identity -- creating the `WeakReference` fails. As noted in the JBS issue, there are 3 cases to consider. 1. `SelectedItemsReadOnlyObservableList<E>` -- `E` is the item type (created by `MultipleSelectionModelBase<T>`) : `ListView`, `TableView`, `ComboBox` (due to its skin creating a `ListView<T>`) -- replace with `WeakReferenceWrapper` 2. `TablePosition<S,T>` -- `S` is the item type : `TableView` -- the reference is unused, so I removed it 3. `TableCell<S,T>` and `TreeTableCell<S,T>` -- `S` is the item type : `TableView`, `TreeTableView` -- replace with `WeakReferenceWrapper` The new `WeakReferenceWrapper` class takes a referent of any type and either creates a WeakReference (if it has identity) or directly stores the reference (if it is null or does not have identity). I added a test for the wrapper. All of the controls tests pass with this fix. I did three test runs as follows: 1. JDK 25 2. JDK 28 without `--enable-preview` 3. JDK 28 with `--enable-preview` Without the fix, 22 controls tests fails on the 3rd run. --------- - [x] I confirm that I make this contribution in accordance with the [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). ------------- Commit messages: - remove debug prints - Merge branch 'master' into 8387301-control-weakref - add test for WeakReferenceWrapper - cleanup - docs - Remove dead code - fix typo - Copyright year - WIP: 8387301: WeakReferenceWrapper Changes: https://git.openjdk.org/jfx/pull/2250/files Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=2250&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8387301 Stats: 235 lines in 6 files changed: 210 ins; 15 del; 10 mod Patch: https://git.openjdk.org/jfx/pull/2250.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/2250/head:pull/2250 PR: https://git.openjdk.org/jfx/pull/2250
