On Sat, 13 Apr 2024 09:04:36 GMT, Rémi Forax <fo...@openjdk.org> wrote:

>> Viktor Klang has updated the pull request incrementally with one additional 
>> commit since the last revision:
>> 
>>   Adding additional, short-circuit-specific, cases to the FlatMap benchmark
>
> src/java.base/share/classes/java/util/stream/AbstractPipeline.java line 442:
> 
>> 440:      *         {@code false} if not.
>> 441:      */
>> 442:     protected final boolean isShortCircuitingPipeline() {
> 
> protected can be replaced by package-private

Since `hasAnyStateful()` is protected, I think this too should be, for 
consistency.

> src/java.base/share/classes/java/util/stream/AbstractPipeline.java line 448:
> 
>> 446:              u = u.nextStage) {
>> 447:         }
>> 448:         return result;
> 
> can be written in a simpler way
> 
> for(var stage = sourceStage.nextStage; stage != null; stage = 
> stage.nextStage) {
>   if (StreamOpFlag.SHORT_CIRCUIT.isKnown(u.combinedFlags)) {
>     return true;
>   }
>   return false;
> }
> 
> no local variable and no SSA phi

In general, I don't like multiple exit-paths from methods, but I agree that in 
this case it increases readability.

> src/java.base/share/classes/java/util/stream/DoublePipeline.java line 267:
> 
>> 265:             @Override
>> 266:             Sink<Double> opWrapSink(int flags, Sink<Double> sink) {
>> 267:                 final DoubleConsumer fastPath =
> 
> this `final` is unecessary, inconsistent with the style of all other fiels of 
> this package.

I think it is good practice to `final` anything which will be closed over. 
(Effectively Final is not as clear as Explicitly Final)

> src/java.base/share/classes/java/util/stream/DoublePipeline.java line 281:
> 
>> 279:                     @Override
>> 280:                     public void accept(double e) {
>> 281:                         try (final var result = mapper.apply(e)) {
> 
> `final` is unecessary and i will keep the type instead of `var` because this 
> code quite complex and eliding the type does not help (and also mixing var 
> and not var in the same method is not recommanded cf Stuart guide on where 
> using 'var')

There's only a single var in this method, and no other variables. But I agree 
on keeping the type explicit, since the definition of the `mapper` is far away 
from the application thereof.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/18625#discussion_r1564050082
PR Review Comment: https://git.openjdk.org/jdk/pull/18625#discussion_r1564051078
PR Review Comment: https://git.openjdk.org/jdk/pull/18625#discussion_r1564051678
PR Review Comment: https://git.openjdk.org/jdk/pull/18625#discussion_r1564052465

Reply via email to