我正在为扩展scala.Dynamic
的类创建一些宏。这些宏看起来像:
class MyProxy extends scala.Dynamic {
final def selectDynamic(field: String): MyProxy = macro ...
final def updateDynamic(field: String)(value: Any): Unit = macro ...
}
这些宏工作正常。但是MyProxy
只允许一组有限的成员访问,我希望这些成员列在Scala IDE的内容辅助和REPL控制台的Tab键中。
因为MyProxy
实例本身是由宏创建的,我想知道是否有任何属性如setCodeCompletionType
可以从创建MyProxy
的宏中设置,帮助REPL和Scala IDE的代码完成(并且不影响生成的Java字节代码)。然后我会有一个像这样的宏:
def newMyProxyInstanceImpl(c: Context)(...): c.Expr[MyProxy] = {
import c.universe._
val tree: Tree = ...
val codeCompletionHint: Type = RefinedType(...)
tree.setCodeCompletionType(codeCompletionHint)
c.Expr(tree)
}
如何破解Scala编译器以使此方法有效?