Пакет scala.reflect.macros.whitebox
пакет whitebox
Члены типов
трактContext extends blackbox.Context
© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala-reflect/scala/reflect/macros/whitebox/index.html
ЭКСПЕРИМЕНТАЛЬНО
Контекст Scala-макросов whitebox.
См. обзорную страницу для описания работы макросов. Этот раздел документации предоставляет информацию об API, доступном авторам макросов.
Контекст макроса оборачивает вселенную компилятора, представленную в
universeи имеющую тип scala.reflect.macros.Universe. Этот тип представляет собой уточнение универсального API рефлексии, представленного в scala.reflect.api.Universe. Расширенная Вселенная предоставляет возможность изменения отражаемых артефактов (например, макросы могут изменять типы деревьев компилятора, добавлять аннотации к символам, представляющим определения и т. д.) и предоставляет некоторые внутренние возможности компилятора, такие какSymbol.deSkolemizeилиTree.attachments.Еще одной фундаментальной частью контекста макроса является
macroApplication, которая предоставляет доступ к дереву, подвергающемуся расширению макроса. Части этого дерева можно найти в аргументах соответствующих реализаций макроса и вprefix, ноmacroApplicationдает полную картину.Помимо этого, контексты макросов предоставляют средства для проверки типов, изучения таблицы символов компилятора и окружающих деревьев и единиц компиляции, вычисления деревьев, регистрации предупреждений/ошибок и многого другого. Подробности см. в документации по основным трактам в этом пакете.
Если макрос def ссылается на реализацию макроса impl, использующую
whitebox.Context, то этот макрос def становится whitebox-макросом, получая возможность уточнить тип своего расширения за пределами его официального возвращаемого типа, что позволяет реализовать ряд важных случаев использования. Blackbox-макросы, то есть те, которые определены сblackbox.Context, этого сделать не могут, поэтому они менее мощные. Тем не менее, blackbox-макросы получат лучшую поддержку, чем whitebox-макросы, поэтому выбирайте с умом. Дополнительную информацию см. в Руководстве по макросам.scala.reflect.macros.blackbox.Context