Question

Je teste mon plug-in en l'exécutant en cours comme ceci:

  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
  }

Cependant, étant donné la vitesse lente de scalac je voudrais vraiment que pour la compilation à la fin après une certaine phase (plus précisément, après mes courses de plug-in). Malheureusement Global.cancel n'a pas l'effet escompté. Comment pourrais-je faire?

Était-ce utile?

La solution

scalac a un argument explicite à cet effet. A partir de 2.9.0.RC2 vous pouvez spécifier à la ligne de commande:

-Ystop-after:<phasename>

Et dans les versions antérieures:

-Ystop:<phasename>

Pour l'équivalent directement à partir d'une instance de Settings, cela est défini comme stopAfter (ou stop dans les versions antérieures)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top