Я пишу макрос Scala и просматриваю дерево, чтобы найти не-частные поля в классах.Почему у этого публичного поля есть флаг PRIVATE?
Рассмотрим этот код, что макрос смотрит на:
class Foo {
val bar: String = "test"
}
Я обходе этот код и получить к bar
«s ValDef
. Он имеет только два флага в своих модификаторах: Flag.PRIVATE
и Flag.LOCAL
.
Использование модификатора private
на bar
ничего не меняет. Использование модификатора protected
добавляет только Flag.PROTECTED
к списку флагов.
Что мне не хватает? Как я могу провести различие между частными и общественными полями?
Edit:
Следующий код:
val bar: String = "test"
имеет ни Flag.PRIVATE
, ни Flag.LOCAL
, что имеет смысл, так как это 'глобальный' общественный вал.
Контекст, в котором я работаю внутри, пишет новую бородавку для wartremover, которая просто принимает Traverser
из юниверса контекста при расширении макроса и перемещается по блоку кода.
Не могли бы вы поделиться своим кодом, чтобы мы могли поиграть с ним? – Dici
Я мог бы создать репродукцию, если вам нравится, но код, который я использую, просто принимает Traverser из вселенной и запускает его в коде во время макрорасширения. –
@ Dici Я добавил дополнительную информацию и контекст к вопросу. HTH –