остановка компиляции Scala после определенной фазы

StackOverflow https://stackoverflow.com/questions/5809517

Вопрос

Я тестирую свой плагин, запустив его в процесс, как это:

  type PluginMessage = StoreReporter#Info
  def runPlugin(fileName: String): List[PluginMessage] = {
    val settings = new Settings 
    settings.outputDirs setSingleOutput (curDir + "/target")
    settings.classpath.tryToSet(List(
      "project/boot/scala-" + scalaVersion + "/lib/scala-compiler.jar" +
      ":project/boot/scala-" + scalaVersion + "/lib/scala-library.jar"))
    val reporter = new StoreReporter
    val compiler = new Global(settings, reporter) {
      override protected def computeInternalPhases() {
        super.computeInternalPhases
        for (phase <- new AlacsPlugin(this).components)
          phasesSet += phase
      }
    }
    (new compiler.Run).compile(List(testPrefix + fileName))
    reporter.infos.toList
  }

Однако, учитывая медленную скорость scalac Я бы очень хотел, чтобы компиляция закончилась после определенной фазы (в частности, после запуска моего плагина). К сожалению Global.cancel не имеет предполагаемого эффекта. Как я могу это сделать?

Это было полезно?

Решение

Скалак имеет аргумент явно для этой цели. По состоянию на 2.9.0.rc2 вы можете указать в командной строке:

-Ystop-after:<phasename>

И в более ранних версиях:

-Ystop:<phasename>

Сделать эквивалент непосредственно из Settings Пример, это определяется как stopAfter (или же stop в более ранних версиях)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top