Thanks for pointing this out. We don't use parallel streams for the cases in question, so we don't have the concurrency concerns that the stream docs point out. However, we should take a look and make sure that the call to peek can't be optimized out, since I expect some applications will start running with JDK 17 as soon as it is released (in less than 2 weeks).

I filed a bug to investigate this:

https://bugs.openjdk.java.net/browse/JDK-8273349

-- Kevin


On 9/3/2021 2:27 AM, dev.in...@mailbox.org wrote:
Hey all,

recently I stumbled over the problem of non-executing stream operations, especially 
`Stream.peek(Consumer<? super T> action)`, for more Info see [1]. With JDK 17 
this behaviour is even extended (e.g. skip() preserves the SIZED attribute of a 
stream, making optimizations possible).

Out of curiosity I searched the sources at HEAD of peek(...) usages and found 
two problematic classes:
* javafx.scene.control.MultipleSelectionModelBase: Line 745
* javafx.scene.control.ControlsUtil: Line 165 & 171

Especially the statement around line 171 in ControlsUtil is a candidate which might be 
"optimized" to not execute the peek(...) at all, while the inline comment 
states the call to peek is crucial.

I don't know what the roadmap says about updating to JDK17, but it might 
already be a problem and I wantend to raise attention to this.

Best Regards,
Armin


[1] 
https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/stream/package-summary.html#SideEffects

Reply via email to