我正在通过像这样运行程序进行测试插件:

  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 没有预期效果。我该怎么做?

有帮助吗?

解决方案

Scalac为此目的明确有一个论点。从2.9.0.RC2开始,您可以在命令行中指定:

-Ystop-after:<phasename>

在早期版本中:

-Ystop:<phasename>

直接从一个 Settings 实例,这被定义为 stopAfter (或者 stop 在早期版本中)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top