2015-08-25 6 views
6

Biorąc pod uwagę następujące elementy:SBT 0.13.0 - nie można rozwinąć makr skompilowane przez poprzednich wersjach Scali

src/main/scala/net/Equals5.scala

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) 
    } 
} 

kompilacji. 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" 

projektu/build.properties

sbt.version=0.13.0 

mogę skompilować pomyślnie, ale próbuje uruchomić następujący test:

src/test/scala/net/Equals5Test.scala

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 
    } 
} 

daje błąd kompilacji:

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

Patrząc na to answer, spodziewałem się, że za pomocą scala 2.11 z sbt 0.13.0 naprawiłoby ten problem.

Proszę dać mi znać, jak rozwiązać ten błąd podczas kompilacji.

+0

Dlaczego używasz '" org.scalatest "%" scalatest_2.10 "' zamiast '" org.scalatest " %% "scalatest" '? czy masz jakiś powód? – ymonad

+0

Mam podobny problem również. Ciekawe, czy to załatwiłeś? W moim przypadku natknąłem się na wersję skalowalną (jeden problem rozwiązany), ale nadal mam problem na poziomie serializacji. – zochhuana

+0

powinieneś użyć scala 2.10.4 lub 2.10.x FYI, http://stackoverflow.com/questions/27888182/cant-expand-macros-compiled-by-previous-versions-of-scala-scala-2-11- 4-sbt-0 – gaozhidf

Odpowiedz

11

Żądasz konkretnie wersji ScalaTest, która jest skompilowana dla Scala 2.10, więc jej makra, takie jak compile, nie będą poprawnie rozwijane (i prawdopodobnie nie będzie kompatybilne z Scala 2.11 w inny sposób). (Również obecna wersja SBT to 0.13.9, więc możesz chcieć ją również zaktualizować.)

Powiązane problemy