Merge pull request #74 from duboisf/issue_68

Added JavacLogger, closes #68
This commit is contained in:
Mark Harrah 2011-06-25 06:59:57 -07:00
commit 48940bf23c
1 changed files with 36 additions and 3 deletions

View File

@ -86,7 +86,14 @@ object Compiler
val exec = javaHome match { case None => "javac"; case Some(jh) => (jh / "bin" / "javac").absolutePath }
(args: Seq[String], log: Logger) => {
log.debug("Forking javac: " + exec + " " + args.mkString(" "))
Process(exec, args) ! log
val javacLogger = new JavacLogger(log)
var exitCode = -1
try {
exitCode = Process(exec, args) ! javacLogger
} finally {
javacLogger.flush(exitCode)
}
exitCode
}
}
@ -95,8 +102,34 @@ object Compiler
import in.compilers._
import in.config._
import in.incSetup._
val agg = new AggressiveCompile(cacheDirectory)
agg(scalac, javac, sources, classpath, classesDirectory, options, javacOptions, analysisMap, definesClass, maxErrors, order)(log)
}
}
}
private[sbt] class JavacLogger(log: Logger) extends ProcessLogger {
import scala.collection.mutable.ListBuffer
import Level.{Info, Warn, Error, Value => LogLevel}
private val msgs: ListBuffer[(LogLevel, String)] = new ListBuffer()
def info(s: => String): Unit =
synchronized { msgs += ((Info, s)) }
def error(s: => String): Unit =
synchronized { msgs += ((Error, s)) }
def buffer[T](f: => T): T = f
private def print(desiredLevel: LogLevel)(t: (LogLevel, String)) = t match {
case (Info, msg) => log.info(msg)
case (Error, msg) => log.log(desiredLevel, msg)
}
def flush(exitCode: Int): Unit = {
val level = if (exitCode == 0) Warn else Error
msgs foreach print(level)
msgs.clear()
}
}