IntelliJでScalaの継続プラグインを設定

以下のScala実践プログラミングの限定継続のサンプルをIntelliJで動かす時にハマったのでメモ。

import scala.util.continuations._

object Main extends App {
val answer = reset {
val x = shift {k: (Int => Int) =>
println("A")
println("k(10) = " + k(10))
println("B")
8
}
println("x = " + x)
x * 2
}
println("answer = " + answer)
}

普通にコンパイルすると以下のエラーとなる。

java.lang.NoSuchMethodError: scala.util.continuations.package$.shift(Lscala/Function1;)Ljava/lang/Object;

コンパイルするためには継続プラグイン(continuations.jar)の置き場所をIntelliJで指定しないといけない。

continuations.jarはbrewやsbt(ivy)で取ってきたディレクトリを探すと見つかると思います。

Project Structure > Modulesで対象モジュールのScalaオプションを選択すると以下の画面が表示されます。
Compiler Pluginsでcontinuations.jarを追加し、”Enable continuations”にチェックを入れるとScalaの限定継続のコードがコンパイルできるようになります。