2015-08-25 4 views
6

Dato il seguente:SBT 0.13.0 - non può espandersi macro compilati da versioni precedenti di Scala

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

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

progetto/build.properties

sbt.version=0.13.0 

posso compilare correttamente, ma il tentativo di eseguire il seguente 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 
    } 
} 

dà un errore di compilazione:

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

Guardando questa answer, mi aspettavo che l'utilizzo di scala 0.123.con sbt 0.13.0 avrebbe risolto questo problema.

Per favore fatemi sapere come risolvere questo errore in fase di compilazione.

+0

Perché stai usando "" org.scalatest "%" scalatest_2.10 "' invece di '" org.scalatest " %% "scalatest" '? hai qualche ragione? – ymonad

+0

Ho anche un problema simile. Mi chiedo se l'hai risolto? Nel mio caso, ho urtato la versione più scalabile (un ostacolo risolto), ma ho ancora riscontrato il problema a livello di serializzazione. – zochhuana

+0

dovresti usare scala 2.10.4 o 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

risposta

11

Si richiede espressamente la versione di ScalaTest compilata per Scala 2.10, quindi i suoi macro come compile non verranno espansi correttamente (ed è anche probabile che non sia compatibile con Scala 2.11 in altri modi). (Anche la versione SBT attuale è 0.13.9, quindi potresti voler aggiornare anche a questo.)

Problemi correlati