我正在编写一个 Scala 宏并遍历树以查找类中的非私有字段。
考虑宏查看的这段代码:
class Foo {
val bar: String = "test"
}
我正在遍历这段代码并到达bar
's ValDef
. 它的修饰符中只有两个标志:Flag.PRIVATE
和Flag.LOCAL
.
使用private
修饰符bar
不会改变任何事情。使用protected
修饰符只会添加Flag.PROTECTED
到标志列表中。
我错过了什么?如何区分私有字段和公共字段?
编辑:
以下代码:
val bar: String = "test"
既没有Flag.PRIVATE
也没有Flag.LOCAL
,这是有道理的,因为它是一个“全球”公共 val。
我在里面工作的上下文是为wartremover编写一个新的 wart ,它只是Traverser
在扩展宏并遍历代码块时从上下文的宇宙中获取一个。