我正在测试我的插件,方法是在进程中运行它:
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
没有预期的效果。我怎么能这样做?
答案 0 :(得分:9)
scalac明确地为此目的提出了一个论点。从2.9.0.RC2开始,您可以在命令行中指定:
-Ystop-after:<phasename>
在早期版本中:
-Ystop:<phasename>
要直接从Settings
实例执行等效操作,定义为stopAfter
(或早期版本中的stop
)