/*                     __                                               *\
**     ________ ___   / /  ___     Scala Ant Tasks                      **
**    / __/ __// _ | / /  / _ |    (c) 2005-2009, LAMP/EPFL             **
**  __\ \/ /__/ __ |/ /__/ __ |    http://scala-lang.org/               **
** /____/\___/_/ |_/____/_/ | |                                         **
**                          |/                                          **
\*                                                                      */

// $Id: ForeignCompiler.scala 17235 2009-03-03 18:43:32Z michelou $

package scala.tools.ant.sabbus

import java.io.File

import scala.tools.nsc._
import scala.tools.nsc.reporters.ConsoleReporter

class ForeignCompiler {
  
  private var argsBuffer: Array[String] = null
  def args: Array[String] = argsBuffer
  def args_=(a: Array[String]) {
    argsBuffer = a
    nsc
  }
  
  private val error: (String => Nothing) = { msg => throw new Exception(msg) }
  
  private def settings = new scala.tools.nsc.Settings(error)
  
  private lazy val reporter = new ConsoleReporter(settings)
  
  private lazy val nsc: Global = {
    try {
      val command = new CompilerCommand(args.toList, settings, error, false)
      new Global(command.settings, reporter)
    }
    catch {
      case ex @ FatalError(msg) =>
        throw new Exception(msg, ex)
    }
  }
  
  def compile(files: Array[File]): Int = {
    val command = new CompilerCommand(files.toList.map(_.toString), settings, error, true)
    (new nsc.Run) compile command.files
    reporter.ERROR.count << 16 | reporter.WARNING.count
  }
  
}