/* sbt -- Simple Build Tool * Copyright 2010 Mark Harrah */ package xsbt.api import xsbti.SafeLazy import xsbti.api._ import sbt.Using import sbinary._ import DefaultProtocol._ import Operations.{read,write} import java.io.File import scala.collection.mutable object SourceFormat extends Format[Source] { import java.io._ def reads(in: Input): Source = { val oin = new ObjectInputStream(new InputWrapperStream(in)) try { oin.readObject.asInstanceOf[Source] } finally { oin.close() } } def writes(out: Output, src: Source) { val oout = new ObjectOutputStream(new OutputWrapperStream(out)) try { oout.writeObject(src) } finally { oout.close() } } } final class InputWrapperStream(in: Input) extends java.io.InputStream { def toInt(b: Byte) = if(b < 0) b + 256 else b.toInt def read() = try { toInt(in.readByte) } catch { case e: sbinary.EOF => -1 } override def read(b: Array[Byte], off: Int, len: Int) = in.readTo(b, off, len) } final class OutputWrapperStream(out: Output) extends java.io.OutputStream { override def write(bs: Array[Byte], off: Int, len: Int) = out.writeAll(bs, off, len) def write(b: Int) = out.writeByte(b.toByte) } trait References { def id(s: Structure): Int def id(s: ClassLike): Int def structure(id: Int): Structure def classLike(id: Int): ClassLike }