在注释宏中,我枚举了一个类的成员,并且想要找到我找到的方法的类型。
所以我很高兴地遍历了body
这个类,并收集了所有的DefDef
成员。
...我无法进行类型检查。
对于每一个DefDef
我都尝试过将它包装在 anExpr
和 using 中actualType
。我试过复制这个东西并将它移植到一个临时类中(通过准引号)。我已经尝试了我能想到的所有其他方法:)
根据所使用的技术,我能得到的最好的结果是NoType
或。Any
我得到的最糟糕的是向我抛出异常。
这些是简单的方法,形式为def foo(i: String) = i
,因此需要推断返回类型,但不需要外部信息。这里没有抽象类型、类型参数或类的其他成员。我想稍后处理更高级的案例,但希望先让这些琐碎的例子工作。
在插件中,这很简单。我只需对已抑制错误的整个单元进行类型检查,并通过符号获得我想要的内容,然后重置树属性以进行后续处理。作为一个宏......我很难过。
我错过了什么?