Frage

Ich teste mein Plugin, indem ich es in Prozess so ausführe:

  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
  }

Angesichts der langsamen Geschwindigkeit von jedoch scalac Ich möchte wirklich, dass Compilation nach einer bestimmten Phase endet (insbesondere nach meinem Plugin). Leider Global.cancel hat nicht die beabsichtigte Wirkung. Wie könnte ich das machen?

War es hilfreich?

Lösung

Scalac hat ein Argument ausdrücklich zu diesem Zweck. Ab 2.9.0.RC2 können Sie in der Befehlszeile angeben:

-Ystop-after:<phasename>

Und in früheren Versionen:

-Ystop:<phasename>

Das Äquivalent direkt von a machen Settings Instanz ist definiert als stopAfter (oder stop in früheren Versionen)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top