On Wed, 17 Dec 2025 15:04:18 GMT, Kevin Rushforth <[email protected]> wrote:

>> When compiling JavaFX with Java 25, a new warning appears. This warning will 
>> result in a compilation failure because warnings are treated as error 
>> (`-Werror`).
>> 
>> The following warning appears:
>> 
>> 
>>> Task :controls:compileJava
>> C:..\jfx\modules\javafx.controls\src\main\java\javafx\scene\control\SplitPane.java:320:
>>  warning: [identity] use of a value-based class with an operation that 
>> expects reliable identity
>>     private final WeakHashMap<Integer, Double> dividerCache = new 
>> WeakHashMap<>();
>>                                                                              
>> ^
>> C:..\jfx\modules\javafx.controls\src\main\java\javafx\scene\control\SplitPane.java:320:
>>  warning: [identity] use of a value-based class with an operation that 
>> expects reliable identity
>>     private final WeakHashMap<Integer, Double> dividerCache = new 
>> WeakHashMap<>();
>>                              ^
>> error: warnings found and -Werror specified
>> 1 error
>> 2 warnings
>> 
>>> Task :controls:compileJava FAILED
>> 
>> 
>> The warning makes sense: We use a `WeakHashMap` with the `Integer` class. So 
>> the `Integer` values are saved as `WeakRef` inside the `Map`. This makes no 
>> sense and is rightfully a warning.
>
> modules/javafx.controls/src/main/java/javafx/scene/control/SplitPane.java 
> line 316:
> 
>> 314: 
>> 315:     // Cache the divider positions if the items have not been created.
>> 316:     private final Map<Integer, Double> dividerCache = new HashMap<>();
> 
> I don't understand why this would have anything to do with a compiler 
> warning. Further, this will likely lead to a leak, so I doubt this is what we 
> want.

I recommend using a LinkedHashMap that overrides `removeEldestEntry` for this 
cache instead.

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

PR Review Comment: https://git.openjdk.org/jfx/pull/2010#discussion_r2628410224

Reply via email to