Я пишу макрос, который генерирует некоторый код, подобный этому:
q"_root_.ru.lmars.macropack.TagsAndTags2.$tagName(..$tagParams)"
, но я хочу сгенерировать этот код, только если определено $tagName
и есть некоторый «маркер» (например, аннотация или некоторыеспециальный тип возврата).Как получить Symbol
из $tagName
для этого?
Это просто, если $tagName
определен внутри TagsAndTags2
объекта:
object TagsAndTags2
{
def dialog(caption: String): String = ???
}
, вы можете написать что-то вроде этогоget Symbol
из dialog
:
val tagParentAccess = q"_root_.ru.lmars.macropack.TagsAndTags2"
val tagParent = c.typecheck(tagParentAccess, silent = true)
val tagSymbol = tagParent.tpe.member(tagName)
Но как сделать то же самое, если $tagName
доступно через неявное преобразование?
implicit final class UserTags(x: TagsAndTags2.type)
{
def dialog(caption: String): String = ???
}