2014-07-07 110 views
1

我不確定它是否重複Type Parameters on Scala Macro Annotations或不。宏註釋和類型參數

我試圖讓宏觀註釋類型參數:

class builder extends StaticAnnotation { 
    def macroTransform(annottees: Any*) = macro builderMacro.impl 
} 
//.... 
val q"new $_[$tpt]().macroTransform(..$_)" = c.macroApplication 
val tpe = c.typecheck(tpt).tpe 
// also tried 
// val tpe = c.typecheck(q"None.asInstanceOf[$tpt]").tpe 

代碼,使用宏:

object Test2 { 
    trait TestBuilders 

    @builder[TestBuilders] 
    case class TestClass(x: Int, opt1: Option[String], opt2: Option[String]) { 
    val opts = (opt1, opt2) 
    } 
} 

和例外,我得到:

[error] scala.reflect.macros.TypecheckException: not found: type TestBuilders 
[error]   at scala.reflect.macros.contexts.Typers$$anonfun$typecheck$2$$anonfun$apply$1.apply(Typers.scala:34) 
[error]   at scala.reflect.macros.contexts.Typers$$anonfun$typecheck$2$$anonfun$apply$1.apply(Typers.scala:28) 
[error]   at scala.tools.nsc.typechecker.Contexts$Context.withMode(Contexts.scala:374) 
[error]   at scala.reflect.macros.contexts.Typers$$anonfun$3.apply(Typers.scala:24) 
[error]   at scala.reflect.macros.contexts.Typers$$anonfun$3.apply(Typers.scala:24) 
[error]   at scala.reflect.macros.contexts.Typers$$anonfun$withContext$1$1.apply(Typers.scala:25) 
[error]   at scala.reflect.macros.contexts.Typers$$anonfun$withContext$1$1.apply(Typers.scala:25) 
[error]   at scala.tools.nsc.typechecker.Contexts$Context.withMode(Contexts.scala:374) 
[error]   at scala.reflect.macros.contexts.Typers$$anonfun$1.apply(Typers.scala:23) 
[error]   at scala.reflect.macros.contexts.Typers$$anonfun$1.apply(Typers.scala:23) 
[error]   at scala.reflect.macros.contexts.Typers$class.withContext$1(Typers.scala:25) 
[error]   at scala.reflect.macros.contexts.Typers$$anonfun$typecheck$2.apply(Typers.scala:28) 
[error]   at scala.reflect.macros.contexts.Typers$$anonfun$typecheck$2.apply(Typers.scala:28) 
[error]   at scala.reflect.internal.Trees$class.wrappingIntoTerm(Trees.scala:1691) 
[error]   at scala.reflect.internal.SymbolTable.wrappingIntoTerm(SymbolTable.scala:16) 
[error]   at scala.reflect.macros.contexts.Typers$class.withWrapping$1(Typers.scala:26) 
[error]   at scala.reflect.macros.contexts.Typers$class.typecheck(Typers.scala:28) 
[error]   at scala.reflect.macros.contexts.Context.typecheck(Context.scala:6) 
[error]   at scala.reflect.macros.contexts.Context.typecheck(Context.scala:6) 
[error]   at builderMacro$.impl(Macros.scala:55) 

我是什麼做錯了?

+0

好的..我能夠使用沒有實際類型的「tpt」樹。但我仍然不明白爲什麼我不能在這裏獲得類型 – wedens

回答