SBT 0.13.0-невозможно развернуть макросы, скомпилированные предыдущими версиями Scala

учитывая следующее:

src / main/scala/net / Equals5.скала!--11-->

package net

import scala.language.experimental.macros
import scala.reflect.macros.Context

case class Equals5(value: Int) {
    require(value == 5)
}

object Equals5 {
    implicit def wrapInt(n: Int): Equals5 = macro verifyIntEquals5

    def verifyIntEquals5(c: Context)(n: c.Expr[Int]): c.Expr[Equals5] = {
    import c.universe._

    val tree = n.tree match {
      case Literal(Constant(x: Int)) if x == 5 =>
        q"_root_.net.Equals5($n)"
      case Literal(Constant(x: Int)) =>
        c.abort(c.enclosingPosition, s"$x != 0")
      case _ => 
        q"_root_.net.Equals5($n)"
    }
    c.Expr(tree)
  }
}

построить.sbt

val paradiseVersion = "2.1.0-M5"

scalaVersion := "2.11.7"

libraryDependencies += "org.scala-lang" % "scala-reflect" % "2.11.7"

libraryDependencies += "org.scalatest" % "scalatest_2.10" % "3.0.0-M7"

проект/построить.свойства

sbt.version=0.13.0

Я могу успешно скомпилировать, но пытаюсь выполнить следующий тест:

src / test / scala / net / Equals5Test.скала!--11-->

package net

import org.scalatest.Matchers

import org.scalatest._
import org.scalatest.prop.Checkers._

class Equals5Test extends FlatSpec with Matchers {

    "Trying to create an `Equals5` case class with an invalid Int" should "fail to compile" in {
        "Equals5(-555)" shouldNot compile
    }
}

дает ошибку времени компиляции:

.../Equals5Test.scala:11: can't expand macros compiled 
      by previous versions of Scala
[error]         "Equals5(-555)" shouldNot compile
[error]                                   ^

глядя на это ответ, я ожидал, что с помощью scala 2.11 С sbt 0.13.0 исправил бы эту проблему.

пожалуйста, дайте мне знать, как решить эту ошибку времени компиляции.

1 ответов


вы специально запрашиваете ScalaTest версию, которая компилируется для Scala 2.10, поэтому ее макросы, такие как compile не будет расширен правильно (и вполне вероятно, что он не будет совместим с Scala 2.11 и другими способами). (Также текущая версия SBT-0.13.9, поэтому вы также можете обновить ее.)