On Mon, 30 Oct 2023 15:38:35 GMT, Viktor Klang <vkl...@openjdk.org> wrote:
> This is a Draft PR for [JEP-461](https://openjdk.org/jeps/461) src/java.base/share/classes/java/util/stream/AbstractPipeline.java line 88: > 86: */ > 87: @SuppressWarnings("rawtypes") > 88: protected final AbstractPipeline previousStage; Making this accessible in subclasses allows to avoid having to store this reference twice, and since this value is passed in during ctor it doesn't expose something previously hidden. src/java.base/share/classes/java/util/stream/AbstractPipeline.java line 223: > 221: previousStage.linkedOrConsumed = true; > 222: > 223: previousPreviousStage.nextStage = this; This allows subclasses to replace the "end" of a pipeline with a new "end" presuming that the previous "end" is not linked nor consumed. As an example, it allows a GathererOp(gathererA) to be replaced with a GathererOp(gathererA.andThen(gathererB)) src/java.base/share/classes/java/util/stream/AbstractPipeline.java line 242: > 240: } > 241: > 242: // Terminal evaluation methods This is needed in order to let subclasses override terminal operations such as, but not limited to, `collect`. (since a terminal operation needs to mark the entire pipeline as consumed). src/java.base/share/classes/java/util/stream/AbstractPipeline.java line 444: > 442: spliterator = sourceStage.sourceSpliterator; > 443: sourceStage.sourceSpliterator = null; > 444: } Needed to make this visible to subclasses in order to implement terminal-operations. src/java.base/share/classes/java/util/stream/Gatherer.java line 171: > 169: * parallelized by initializing each partition in separation, > invoking > 170: * the integrator until it returns {@code false}, and then joining > each > 171: * partitions state using the combiner, and then invoking the > finalizer on Suggestion: * partitions state using the combiner, and then invoking the finisher on src/java.base/share/classes/java/util/stream/ReferencePipeline.java line 692: > 690: && > (collector.characteristics().contains(Collector.Characteristics.CONCURRENT)) > 691: && (!isOrdered() || > collector.characteristics().contains(Collector.Characteristics.UNORDERED))) { > 692: container = collector.supplier().get(); Un-final:ed to allow GathererOp to implement fusion of gather + collect ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/16420#discussion_r1377573665 PR Review Comment: https://git.openjdk.org/jdk/pull/16420#discussion_r1377572502 PR Review Comment: https://git.openjdk.org/jdk/pull/16420#discussion_r1377574668 PR Review Comment: https://git.openjdk.org/jdk/pull/16420#discussion_r1377575538 PR Review Comment: https://git.openjdk.org/jdk/pull/16420#discussion_r1378972593 PR Review Comment: https://git.openjdk.org/jdk/pull/16420#discussion_r1377576412