> 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, 31 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).

Kevin Rushforth has updated the pull request incrementally with one additional 
commit since the last revision:

  document that WeakReferenceWrapper might be modified or eliminated in the 
future

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

Changes:
  - all: https://git.openjdk.org/jfx/pull/2250/files
  - new: https://git.openjdk.org/jfx/pull/2250/files/56a17b10..68fd3de7

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jfx&pr=2250&range=01
 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=2250&range=00-01

  Stats: 16 lines in 1 file changed: 16 ins; 0 del; 0 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

Reply via email to