summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/ant/sabbus/ForeignCompiler.scala
blob: 13b6f107a681d0495d2a815dc53cb15974f0ceb6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*                     __                                               *\
**     ________ ___   / /  ___     Scala Ant Tasks                      **
**    / __/ __// _ | / /  / _ |    (c) 2005-2013, LAMP/EPFL             **
**  __\ \/ /__/ __ |/ /__/ __ |    http://scala-lang.org/               **
** /____/\___/_/ |_/____/_/ | |                                         **
**                          |/                                          **
\*                                                                      */


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)
      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)
    (new nsc.Run) compile command.files
    reporter.ERROR.count << 16 | reporter.WARNING.count
  }

}