2

次のようにインプロセスでプラグインを実行して、プラグインをテストしています。

  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、意図した効果はありません。どうすればこれを行うことができますか?

4

1 に答える 1

9

scalac には、この目的のために明示的な引数があります。2.9.0.RC2 以降、コマンド ラインで次のように指定できます。

-Ystop-after:<phasename>

以前のバージョンでは:

-Ystop:<phasename>

インスタンスから直接同等のことを行うにはSettings、これは次のように定義されますstopAfter(またはstop以前のバージョンでは)

于 2011-04-27T20:50:17.777 に答える