Scala宏-引用类符号“时出错”;未找到:值<;类别>&引用;

Scala宏-引用类符号“时出错”;未找到:值<;类别>&引用;,scala,scala-macros,Scala,Scala Macros,我正在尝试创建一个Scala宏,该宏生成如下代码: val x = new com.foo.MyClass() 其中com.foo.MyClass在使用宏的项目的编译时和运行时肯定位于类路径上 我使用以下c.Tree生成代码: Apply(选择(新建(Ident(TermName(“com.foo.MyClass”))))、termNames.CONSTRUCTOR)、List()) 打印show和showRaw命令的输出表明生成了正确的代码,但是com.foo.MyClass似乎在宏扩展期间

我正在尝试创建一个Scala宏,该宏生成如下代码:

val x = new com.foo.MyClass()
其中
com.foo.MyClass
在使用宏的项目的编译时和运行时肯定位于类路径上

我使用以下
c.Tree
生成代码:
Apply(选择(新建(Ident(TermName(“com.foo.MyClass”))))、termNames.CONSTRUCTOR)、List())

打印
show
showRaw
命令的输出表明生成了正确的代码,但是
com.foo.MyClass
似乎在宏扩展期间或编译之后不在类路径上

我在宏的使用点看到以下错误(宏impl本身在单独的项目中定义):

为什么即使它是同一项目中的Java文件,也无法在类路径上找到这个类?我尝试了
-Ymacro-debug-verbose
com.foo.MyClass
不在输出中,但其他一些Java和Scala类都在输出中。在宏扩展的类路径上找不到类的模式


谢谢你的帮助

好的!我设法回答了自己的问题。事实证明,使用
c.mirror.staticClass(“com.foo.MyClass”)
使用编译时反射获取类符号,然后使用准引号是可行的

我的解决方案:

val classSymbol = c.mirror.staticClass("com.foo.MyClass")
val newClassTree = q"new ${classSymbol.toType}()"
c.Expr { newClassTree } // Success! This compiles and runs
val classSymbol = c.mirror.staticClass("com.foo.MyClass")
val newClassTree = q"new ${classSymbol.toType}()"
c.Expr { newClassTree } // Success! This compiles and runs