sbt.DeferredWriter.scala Maven / Gradle / Ivy
package sbt
import java.io.Writer
/** A `Writer` that avoids constructing the underlying `Writer` with `make` until a method other than `close` is called on this `Writer`. */
final class DeferredWriter(make: => Writer) extends Writer {
private[this] var opened = false
private[this] var delegate0: Writer = _
private[this] def delegate: Writer = synchronized {
if (delegate0 eq null) {
delegate0 = make
opened = true
}
delegate0
}
override def close() = synchronized {
if (opened) delegate0.close()
}
override def append(c: Char): Writer = delegate.append(c)
override def append(csq: CharSequence): Writer = delegate.append(csq)
override def append(csq: CharSequence, start: Int, end: Int): Writer = delegate.append(csq, start, end)
override def flush() = delegate.flush()
override def write(cbuf: Array[Char]) = delegate.write(cbuf)
override def write(cbuf: Array[Char], off: Int, len: Int): Unit = delegate.write(cbuf, off, len)
override def write(c: Int): Unit = delegate.write(c)
override def write(s: String): Unit = delegate.write(s)
override def write(s: String, off: Int, len: Int): Unit = delegate.write(s, off, len)
}