pekko/akka-stream/src/main/scala/akka/stream/impl/JavaStreamSource.scala
Martynas Mickevičius 2a9c0370e0 Add @InternalApi annotations and private markers on internal apis (#22563)
* #22506 Mark materializer extension as @InternalApi

* #22506 Added missing annotations on internal apis in the fusing package

* #22506 Missing annotations in io package

* #22506 Add internal api annotations in impl package

* #22563 more hiding of the classes in the impl package

* #22563 Formatting fixes

* #22506 Fix private access in stream tcl tests
2017-03-16 20:04:07 +01:00

39 lines
1.1 KiB
Scala

package akka.stream.impl
import akka.stream._
import akka.stream.stage.{ GraphStage, GraphStageLogic, OutHandler }
import akka.annotation.InternalApi
/** INTERNAL API */
@InternalApi private[stream] final class JavaStreamSource[T, S <: java.util.stream.BaseStream[T, S]](open: () java.util.stream.BaseStream[T, S])
extends GraphStage[SourceShape[T]] {
val out: Outlet[T] = Outlet("JavaStreamSource")
override val shape: SourceShape[T] = SourceShape(out)
override def createLogic(inheritedAttributes: Attributes): GraphStageLogic =
new GraphStageLogic(shape) with OutHandler {
private[this] var stream: java.util.stream.BaseStream[T, S] = _
private[this] var iter: java.util.Iterator[T] = _
setHandler(out, this)
override def preStart(): Unit = {
stream = open()
iter = stream.iterator()
}
override def postStop(): Unit = {
if (stream ne null)
stream.close()
}
override def onPull(): Unit = {
if (iter.hasNext) {
push(out, iter.next())
} else {
complete(out)
}
}
}
}