остановка компиляции Scala после определенной фазы
-
25-10-2019 - |
Вопрос
Я тестирую свой плагин, запустив его в процесс, как это:
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
не имеет предполагаемого эффекта. Как я могу это сделать?
Решение
Скалак имеет аргумент явно для этой цели. По состоянию на 2.9.0.rc2 вы можете указать в командной строке:
-Ystop-after:<phasename>
И в более ранних версиях:
-Ystop:<phasename>
Сделать эквивалент непосредственно из Settings
Пример, это определяется как stopAfter
(или же stop
в более ранних версиях)
Не связан с StackOverflow