2017-01-05 33 views
0

我試圖創建一個斯卡拉宏象生成代碼:斯卡拉宏 - 錯誤引用類符號「未發現:價值<class>」

val x = new com.foo.MyClass() 

其中com.foo.MyClass肯定是在類路徑在編譯時和運行在項目中使用宏的時間。

我使用以下c.Tree生成代碼: Apply(Select(New(Ident(TermName("com.foo.MyClass"))), termNames.CONSTRUCTOR), List())

打印showshowRaw命令的輸出表明,生成正確的代碼,但它似乎com.foo.MyClass要麼不上在宏擴展期間或在編譯期間立即之後。

我看到在宏觀的使用點生成以下錯誤(宏IMPL本身是在一個單獨的項目中定義):

[ERROR] /src/main/java/foo/MyWhatever.scala:10: not found: value com.foo.MyClass 
[ERROR]  MyMacros.someMacro(someInput) 
[ERROR] 

爲什麼沒有找到在類路徑這類即使它是同一個項目中的Java文件?我試過-Ymacro-debug-verbosecom.foo.MyClass不在輸出中,但是一堆其他的Java類庫都是。我無法找到類擴展的類路徑上的類模式。

感謝您的幫助!

回答

0

好吧!我設法回答我自己的問題。事實證明它可以使用c.mirror.staticClass("com.foo.MyClass")來使用編譯時反射來獲得類Symbol,然後使用準引號。

我的解決辦法:

​​