为什么这个 public 字段有一个 PRIVATE 标志?

Why does this public field have a PRIVATE flag?

我正在编写 Scala 宏并遍历树以查找 类 中的非私有字段。

考虑宏查看的这段代码:

class Foo {
  val bar: String = "test"
}

我正在遍历此代码并到达 barValDef。它的修饰符中只有两个标志:Flag.PRIVATEFlag.LOCAL.

bar 上使用 private 修饰符没有任何改变。使用 protected 修饰符只会将 Flag.PROTECTED 添加到标志列表中。

我错过了什么?如何区分私有字段和 public 字段?

编辑:

以下代码:

val bar: String = "test"

既没有 Flag.PRIVATE 也没有 Flag.LOCAL,这是有道理的,因为它是 'global' public val.

我在其中工作的上下文正在为 wartremover 编写一个新的 wart,它在扩展宏并遍历代码块时仅从上下文的 universe 中获取 Traverser

Scala 中的一个 val 定义扩展为一个 private[this] 字段和一个额外的 getter。除了您看到的 ValDef 之外,应该还有一个具有相同名称的附加 DefDef 方法定义,即字段上的 getter。