diff --git a/src/java.base/share/classes/java/util/stream/AbstractPipeline.java b/src/java.base/share/classes/java/util/stream/AbstractPipeline.java index bba017d4144..cdf8a605618 100644 --- a/src/java.base/share/classes/java/util/stream/AbstractPipeline.java +++ b/src/java.base/share/classes/java/util/stream/AbstractPipeline.java @@ -262,8 +262,9 @@ abstract class AbstractPipeline> * @throws IllegalStateException if this pipeline stage is not the source * stage. */ - @SuppressWarnings("unchecked") + final Spliterator sourceStageSpliterator() { + // Ensures that this method is only ever called on the sourceStage if (this != sourceStage) throw new IllegalStateException(); @@ -271,16 +272,16 @@ abstract class AbstractPipeline> throw new IllegalStateException(MSG_STREAM_LINKED); linkedOrConsumed = true; - if (sourceStage.sourceSpliterator != null) { + if (sourceSpliterator != null) { @SuppressWarnings("unchecked") - Spliterator s = sourceStage.sourceSpliterator; - sourceStage.sourceSpliterator = null; + Spliterator s = (Spliterator)sourceSpliterator; + sourceSpliterator = null; return s; } - else if (sourceStage.sourceSupplier != null) { + else if (sourceSupplier != null) { @SuppressWarnings("unchecked") - Spliterator s = (Spliterator) sourceStage.sourceSupplier.get(); - sourceStage.sourceSupplier = null; + Spliterator s = (Spliterator)sourceSupplier.get(); + sourceSupplier = null; return s; } else { @@ -309,8 +310,8 @@ abstract class AbstractPipeline> linkedOrConsumed = true; sourceSupplier = null; sourceSpliterator = null; - if (sourceStage.sourceCloseAction != null) { - Runnable closeAction = sourceStage.sourceCloseAction; + Runnable closeAction = sourceStage.sourceCloseAction; + if (closeAction != null) { sourceStage.sourceCloseAction = null; closeAction.run(); }