Scala宏,如何获得标识符的完整解析符号(术语名和类型名)?

Scala宏,如何获得标识符的完整解析符号(术语名和类型名)?,scala,macros,Scala,Macros,我使用一个宏注释,根据类的另一个方法中的代码内省,向类添加一个方法。我从类定义中提取方法的语法树,但是在方法中,术语和类型的标识符没有展开。这些标识符还不包含有关导入、类内的其他定义和隐式转换的信息 import geo.model.meta.src.state.IStateCoding import java.util.{Collection ⇒ JCollection} import scala.collection.JavaConverters._ @

我使用一个宏注释,根据类的另一个方法中的代码内省,向类添加一个方法。我从类定义中提取方法的语法树,但是在方法中,术语和类型的标识符没有展开。这些标识符还不包含有关导入、类内的其他定义和隐式转换的信息

    import geo.model.meta.src.state.IStateCoding
    import java.util.{Collection ⇒ JCollection}
    import scala.collection.JavaConverters._



    @IntrospectionGenerator
    class IntrospectionTest(
     val a:Int,
     val b:String,
     map:ConcurrentHashMap[String, JCollection[String]]
    ){

        def inrospectionTarget: IntrospectionTest = {
            val map = new ConcurrentHashMap[String, JCollection[String]]()
            map.put("some", Seq("bar").asJava)
            new IntrospectionTest(a, b, map)
        }
    }

//Macros definition example
@compileTimeOnly("enable macro paradise to expand macro annotations")
class IntrospectionGenerator extends StaticAnnotation{
    def macroTransform(annottees: Any*): Any = macro IntrospectionGenerator.impl
}


object IntrospectionGenerator {
    def impl(c: Context)(annottees: c.Expr[Any]*): c.Expr[Any] = {
        import c.universe._
        annottees.map(_.tree) match{
            case (cls @ ClassDef(modifiers, className, typeDefs, template)) :: Nil⇒
                val nonInferedContent = template.body.collectFirst{
                    case DefDef(_, TermName("copyState"), Nil, Nil, _, content) ⇒
                        content
                }.get
                val idents = nonInferedContent.collect{
                    case iden @ Ident(name) ⇒
                        idents //HOW TO GET SYMBOL FOR THIS IDENTIFIER?
                }.flatten

                val generatedMethod = q"override def copyStateSource = $someStructure"
                val extTemplate = Template(
                    template.parents, 
                    template.self, 
                    template.body ::: generatedMethod :: Nil
                )
                c.Expr(ClassDef(modifiers, className, typeDefs, extTemplate))
            case _ ⇒
                c.abort(c.enclosingPosition, "incorrect use of StateCodingMacro")
        }
    }
}
1) 如何在类的上下文中为方法手动创建上下文(黑盒),以便该上下文知道类中的所有定义

2) 如果没有常见的类型检查调用,如何在AST of方法中获得某个标识符(类或方法的完整限定名)的定义?我希望保留原始的树结构,但同时理解此树中的术语和类型的标识符所指的内容。上述代码中的标识符示例:JCollection、asJava、a、b、map、内省测试