Spec-Zone.ru › Scala 2.13 Reflection

Трейт scala.reflect.macros.blackbox.Context

trait Context extends Aliases with Enclosures with Names with Reifiers with FrontEnds with Infrastructure with Typers with Parsers with Evals with ExprUtils with Internals

ЭКСПЕРИМЕНТАЛЬНО

Контекст макросов Scala blackbox.

См. страницу обзора для описания работы макросов. Этот элемент документации предоставляет информацию об API, доступном для разработчиков макросов.

Контекст макроса обертывает вселенную компилятора, представленную в universe и имеющую тип scala.reflect.macros.Universe. Этот тип является уточнением общего API рефлексии, предоставляемого в scala.reflect.api.Universe. Расширенная Вселенная обеспечивает возможность изменения рефлексивных артефактов (например, макросы могут изменять типы деревьев компилятора, добавлять аннотации к символам, представляющим определения и т. д.) и предоставляет некоторые внутренние функции компилятора, такие как Symbol.deSkolemize или Tree.attachments.

Еще одна фундаментальная часть контекста макроса — macroApplication, которая предоставляет доступ к дереву, подвергающемуся макрорасширению. Части этого дерева можно найти в аргументах соответствующих реализаций макросов и в prefix, но macroApplication дает полную картину.

Помимо этого, контексты макросов предоставляют средства для проверки типов, исследования таблицы символов компилятора и охватывающих деревьев и единиц компиляции, вычисления деревьев, протоколирования предупреждений/ошибок и многого другого. Обратитесь к документации верхних трейтов в этом пакете, чтобы узнать подробности.

Если макрос def ссылается на реализацию макро impl, использующую blackbox.Context, то этот макрос def становится макросом blackbox, что означает, что его расширение будет преобразовано в его тип возврата, обеспечивая соответствие этого макроса его сигнатуре типа. Белые макросы, т. е. определенные с whitebox.Context, не ограничены этим ограничением, что позволяет использовать ряд важных случаев использования, но они также получат меньше поддержки, чем blackbox-макросы, поэтому выбирайте обдуманно. См. Руководство по макросам для получения дополнительной информации.

Источник
Context.scala
См. также

scala.reflect.macros.whitebox.Context

Линейные надтипы
Internals, ExprUtils, Evals, Parsers, Typers, Infrastructure, FrontEnds, Reifiers, Names, Enclosures, Aliases, AnyRef, Any
Известные подклассы
Context

Члены типов

интерфейс ContextInternalApi расширяет MacroInternalApi

Определяющие классы
Internals
См. также

scala.reflect.api.Internals

тип Expr[+T] = Universe.Expr[T]

Expr оборачивает абстрактное синтаксическое дерево и помечает его типом.

Определяющие классы
Aliases

тип Modifiers = Universe.Modifiers

Тип модификаторов дерева.

Определяющие классы
Aliases

тип Name = Universe.Name

Абстрактный тип имён.

Определяющие классы
Aliases

тип Position = Universe.Position

Определяет специфичное для вселенной понятие позиций.

Определяющие классы
Aliases

абстрактный тип PrefixType

Тип префиксного дерева, из которого выбран макрос. См. запись документации для prefix для примера.

тип Scope = Universe.Scope

Базовый тип всех областей.

Определяющие классы
Aliases

тип Symbol = Universe.Symbol

Тип символов, представляющих объявления.

Определяющие классы
Aliases

тип TermName = Universe.TermName

Абстрактный тип имён, представляющих термины.

Определяющие классы
Aliases

тип Tree = Universe.Tree

Тип абстрактных синтаксических деревьев Scala.

Определяющие классы
Aliases

тип Type = Universe.Type

Тип Scala-типов, а также сигнатур Scala-типов. (Внутренне между ними разницы нет).

Определяющие классы
Aliases

тип TypeName = Universe.TypeName

Абстрактный тип имён, представляющих типы.

Определяющие классы
Aliases

тип TypeTag[T] = Universe.TypeTag[T]

Тип тегов типов.

Определяющие классы
Aliases

тип TypecheckException = macros.TypecheckException

Определяющие классы
Typers
См. также

scala.reflect.macros.TypecheckException

абстрактный тип TypecheckMode

Представляет режим работы типопроверяющего средства, лежащего в основе c.typecheck вызовов. Необходимо, поскольку форма только что проверенного дерева недостаточно для того, чтобы догадаться, как его следует проверять. Может быть TERMmode (проверка как терм), TYPEmode (проверка как тип) или PATTERNmode (проверка как шаблон).

Определяющие классы
Typers

тип WeakTypeTag[T] = Universe.WeakTypeTag[T]

Тип слабых тегов типов.

Определяющие классы
Aliases

Члены-значения абстрактного типа

abstract def Expr[T](tree: Tree)(implicit arg0: WeakTypeTag[T]): Expr[T]

Сокращенная запись для создания выражения.

В отличие от стандартного фабричного метода для создания выражений, который требует scala.reflect.api.TreeCreator, данный метод принимает обычное дерево, но полученные выражения не могут быть перенесены в другие вселенные/зеркала (эта функциональность обычно не нужна для макросов, так как существует только одна вселенная во время компиляции и только одно зеркало во время компиляции).

Definition Classes
Aliases

abstract val PATTERNmode: TypecheckMode

Указывает, что аргумент c.typecheck должен быть проверен как шаблон.

Definition Classes
Typers

abstract val TERMmode: TypecheckMode

Указывает, что аргумент c.typecheck должен быть проверен как терм. Это режим проверки по умолчанию в Scala 2.11 и единственный поддерживаемый режим в Scala 2.10.

Definition Classes
Typers

abstract val TYPEmode: TypecheckMode

Указывает, что аргумент c.typecheck должен быть проверен как тип.

Definition Classes
Typers

abstract def TypeTag[T](tpe: Type): TypeTag[T]

Сокращенная запись для создания тега типа.

В отличие от стандартного фабричного метода для создания тегов типа, который требует scala.reflect.api.TypeCreator, данный метод принимает обычный тип, но полученные теги типа не могут быть перенесены в другие вселенные/зеркала (эта функциональность обычно не нужна для макросов, так как существует только одна вселенная во время компиляции и только одно зеркало во время компиляции).

Definition Classes
Aliases

abstract def WeakTypeTag[T](tpe: Type): WeakTypeTag[T]

Сокращенная запись для создания слабого тега типа.

В отличие от стандартного фабричного метода для создания тегов типа, который требует scala.reflect.api.TypeCreator, данный метод принимает обычный тип, но полученные теги типа не могут быть перенесены в другие вселенные/зеркала (эта функциональность обычно не нужна для макросов, так как существует только одна вселенная во время компиляции и только одно зеркало во время компиляции).

Definition Classes
Aliases

abstract def abort(pos: Position, msg: String): Nothing

Прерывает текущую макрорасшифровку, оставив заметку о случившемся. Используйте enclosingPosition, если вы сомневаетесь, какую позицию передать в pos.

Definition Classes
FrontEnds

abstract def classPath: List[URL]

Возвращает текущий путь к классам.

Definition Classes
Infrastructure

abstract def compilerSettings: List[String]

Возвращает текущие настройки компилятора как список опций. Используйте scalac -help, scalac -X и scalac -Y, чтобы узнать о поддерживаемых опциях.

Definition Classes
Infrastructure

abstract def echo(pos: Position, msg: String): Unit

Отправляет сообщение, которое не должно быть помечено как предупреждение/ошибка, но также не должно требовать -verbose для отображения. Используйте enclosingPosition, если вы сомневаетесь, какую позицию передать в pos.

Definition Classes
FrontEnds

abstract def enclosingMacros: List[Context]

Контексты, представляющие выполняемые макросы, включая текущий. Очень похожи на стек вызовов, но только для макросов. Могут быть полезны для взаимодействия с другими макросами и для наложения дружественных компилятору ограничений на расширение макросов.

Также бесценны для вывода осмысленных сообщений об ошибках для макросов, которые вызываются другими макросами на синтетических (т.е. лишенных позиции) деревьях. В таком случае просмотрите стек enclosingMacros, и он, скорее всего, будет содержать как минимум один макрос с макроприменением с позицией. См. enclosingPosition для реализации по умолчанию этой логики.

В отличие от openMacros, это значение, что означает, что оно инициализируется при создании контекста и всегда остается неизменным независимо от того, что происходит во время расширения макроса.

Классы определения
Окружения

абстрактный def enclosingPosition: Позиция

Пытается угадать позицию для окружающего применения. Но это просто, верно? Просто разыменовать pos macroApplication? Не совсем. Если мы находимся в синтетическом расширении макроса (без позиций), мы должны сделать все возможное, чтобы вывести позицию того, что спровоцировало это расширение. Удивительно, но довольно часто мы можем сделать это, просматривая стек enclosingMacros.

Классы определения
Окружения

абстрактный def error(pos: Позиция, msg: Строка): Единица

Выводит ошибку компиляции. Используйте enclosingPosition, если сомневаетесь, какую позицию передать pos.

Классы определения
Передние части

абстрактный def eval[T](expr: Выражение[T]): T

Принимает типизированную обертку для дерева типа T и вычисляет его до значения типа T.

Может использоваться для выполнения вычислений во время компиляции над аргументами макроса в той мере, в которой это допускает форма аргументов.

Известные проблемы: из-за https://github.com/scala/bug/issues/5748 деревья, которые оцениваются в первую очередь, должны пройти untypecheck. Переустановка символов и типов изменяет дерево на месте, поэтому стандартный подход заключается в duplicate дерева сначала.

scala> def impl(c: Context)(x: c.Expr[String]) = {
     | val x1 = c.Expr[String](c.untypecheck(x.tree.duplicate))
     | println(s"compile-time value is: ${c.eval(x1)}")
     | x
     | }
impl: (c: Context)(x: c.Expr[String])c.Expr[String]

scala> def test(x: String) = macro impl
test: (x: String)String

scala> test("x")
compile-time value is: x
res0: String = x

scala> test("x" + "y")
compile-time value is: xy
res1: String = xy

scala> val x = "x"
x: String = x

scala> test(x + "y")
compile-time value is: xy
res2: String = xy

scala> { val x = "x"; test(x + "y") }
error: exception during macro expansion:
scala.tools.reflect.ToolBoxError: reflective compilation failed

Обратите внимание, что в последнем случае оценка не удалась, поскольку аргумент макроса относится к значению времени выполнения x, которое неизвестно во время компиляции.

Классы определения
Вычисления

абстрактный def freshName[NameType <: Имя](name: NameType): NameType

Создает более или менее уникальное имя, имеющее указанное имя в качестве префикса и имеющее тот же тип (имя термина или имя типа), что и данное имя. См. scala.reflect.macros.Names для получения дополнительной информации об уникальности таких имен.

Классы определения
Имена

абстрактный def freshName(name: Строка): Строка

Создает строку, представляющую более или менее уникальное имя, имеющее указанный префикс. См. scala.reflect.macros.Names для получения дополнительной информации об уникальности таких имен.

Классы определения
Имена

абстрактный def freshName(): Строка

Создает строку, представляющую более или менее уникальное имя. См. scala.reflect.macros.Names для получения дополнительной информации об уникальности таких имен.

Классы определения
Имена

абстрактный def hasErrors: Булево

В сессии компиляции есть ошибки?

Классы определения
Передние части

абстрактный def hasWarnings: Булево

В сессии компиляции есть какие-либо предупреждения?

Классы определения
Передние части

абстрактный def inferImplicitValue(pt: Тип, silent: Булево = true, withMacrosDisabled: Булево = false, pos: Позиция = enclosingPosition): Дерево

Вычисляет неявное значение требуемого типа pt в контексте вызова макроса. Дополнительный параметр pos предоставляет позицию, которая будет связана с поиском неявного значения.

Если silent равно false, TypecheckException будет вызвано в случае ошибки вывода. Если silent равно true, проверка типов будет беззвучной и вернет EmptyTree в случае ошибки. Такие ошибки не исчезают и могут быть проверены, включив -Xlog-implicits. В отличие от typecheck, silent по умолчанию равно true.

Классы определения
Типовые средства
Исключения

abstract def inferImplicitView(tree: Tree, from: Type, to: Type, silent: Boolean = true, withMacrosDisabled: Boolean = false, pos: Position = enclosingPosition): Tree

Определяет неявное представление (implicit view) из предоставленного дерева tree типа from к типу to в контексте вызова макроса. Необязательный параметр pos задаёт позицию, которая будет ассоциирована с поиском неявного представления.

Если silent равно false, TypecheckException будет выброшено в случае ошибки вывода. Если silent равно true, проверка типов будет выполнена в бесшумном режиме, и будет возвращено значение EmptyTree в случае возникновения ошибки. Такие ошибки не исчезают и могут быть просмотрены, если включить -Xlog-implicits. В отличие от typecheck, значение silent по умолчанию равно true.

Definition Classes
Typers
Исключения

abstract def info(pos: Position, msg: String, force: Boolean): Unit

Выводит информационное сообщение, которое подавляется, если -verbose или force=true. Используйте enclosingPosition в случае сомнений, какую позицию передать в pos.

Definition Classes
FrontEnds

abstract val internal: ContextInternalApi

Definition Classes
Internals
См. также

scala.reflect.api.Internals

abstract def macroApplication: Tree

Дерево, над которым выполняется расширение макроса. Может быть полезно для получения смещения или диапазона позиций всего обрабатываемого дерева.

Definition Classes
Enclosures

abstract val mirror: Universe.Mirror

abstract def openMacros: List[Context]

Контексты, представляющие активные макросы, включая текущий. Очень похоже на стек вызовов, но только для макросов. Может быть полезно для взаимодействия с другими макросами и для наложения компилятором-дружественных ограничений на расширение макросов.

Также очень ценно для вывода осмысленных сообщений об ошибках для макросов, которые вызываются другими макросами над синтетическими (т.е. без позиций) деревьями. В таком случае просмотрите стек openMacros, и он, скорее всего, будет содержать как минимум один макрос с позицией в дереве макро-применения. См. enclosingPosition для реализации по умолчанию этой логики.

В отличие от enclosingMacros, это метод, что означает, что он пересчитывается при каждом вызове, поэтому он может меняться в зависимости от происходящего во время расширения макросов.

Definition Classes
Typers

abstract def parse(code: String): Tree

Разбирает строку со скала-выражением в дерево абстрактного синтаксиса. Работает только с выражениями, т.е. разбор объявления пакета завершится ошибкой.

Definition Classes
Parsers
Исключения

abstract val prefix: Expr[PrefixType]

Префиксное дерево, из которого выбран макрос.

Например, для макроса filter определённого как метод экземпляра на коллекции Coll, prefix представляет эквивалент this для обычных методов экземпляра:

scala> class Coll[T] {
     | def filter(p: T => Boolean): Coll[T] = macro M.filter[T]
     | }; object M {
     | def filter[T](c: Context { type PrefixType = Coll[T] })
     |              (p: c.Expr[T => Boolean]): c.Expr[Coll[T]] =
     |   {
     |     println(c.prefix.tree)
     |     c.prefix
     |   }
     | }
defined class Coll
defined module Macros

scala> new Coll[Int]().filter(_ % 2 == 0)
new Coll[Int]()
res0: Coll[Int] = ...

scala> val x = new Coll[String]()
x: Coll[String] = ...

scala> x.filter(_ != "")
$line11.$read.$iw.$iw.$iw.$iw.$iw.$iw.$iw.$iw.$iw.$iw.$iw.$iw.x
res1 @ 35563b4b: x.type = ...

Обратите внимание, как значение prefix меняется в зависимости от квалификатора вызова макроса (т.е. выражения, которое находится слева от точки).

Ещё одна примечательная вещь в приведённом фрагменте — тип Context { type PrefixType = Coll[T] }, который используется для того, чтобы подчеркнуть, что реализация макроса работает с префиксами типа Coll[T].

abstract def reifyEnclosingRuntimeClass: Tree

Для данного типа генерируется дерево, которое при компиляции и выполнении создаёт класс времени выполнения окружающего класса или модуля. Возвращает EmptyTree если не существует окружающего класса или модуля.

Definition Classes
Reifiers

abstract def reifyRuntimeClass(tpe: Type, concrete: Boolean = true): Tree

Для данного типа генерируется дерево, которое при компиляции и выполнении создаёт класс времени выполнения исходного типа. Если concrete равно true, эта функция будет прерываться для типов, которые ссылаются на абстрактные типы (как это делает ClassTag).

Definition Classes
Reifiers

абстрактный def reifyTree(universe: Tree, mirror: Tree, tree: Tree): Tree

В заданном дереве, сгенерировать дерево, которое при компиляции и выполнении произведёт исходное дерево. Для получения дополнительной информации и примеров, обратитесь к документации для Universe.reify.

Сгенерированное дерево будет связано со специфицированными universe и mirror. Возможные значения для universe включают universe.internal.gen.mkRuntimeUniverseRef. Возможные значения для mirror включают EmptyTree (в этом случае реификтор автоматически выберет подходящее зеркало).

Эта функция тесно связана с Universe.reify, макросом, который преобразует произвольные выражения в деревья во время выполнения. Они выполняют очень похожие действия (Universe.reify вызывает Context.reifyTree для реализации себя), но работают на разных метауровнях (см. ниже).

Давайте изучим различия между Context.reifyTree и Universe.reify на примере их использования внутри макроса fooMacro:

* Поскольку сам reify является макросом, он будет выполнен при компиляции fooMacro (метауровень -1) и сгенерирует дерево, которое при вычислении во время расширения макроса fooMacro (метауровень 0) воссоздаст входное дерево.

Это обеспечивает возможность, аналогичную квазицитированию. Написание "reify{ expr }" сгенерирует AST, представляющий expr. После этого этот AST (или его части) можно использовать для построения возвращаемого значения fooMacro.

* reifyTree вычисляется во время расширения макроса (метауровень 0) и сгенерирует дерево, которое при вычислении во время выполнения программы (метауровень 1) воссоздаст входное дерево.

Это предоставляет способ сохранения определенных деревьев со времени расширения макроса для последующего просмотра во время выполнения. Например, авторам DSL может быть полезно захватывать фрагменты DSL в AST, которые затем обрабатываются во время выполнения специальным образом.

Обратите также внимание на разницу между вселенными деревьев во время выполнения, созданных двумя реификсациями:

* Результат компиляции и выполнения результата reify будет связан с Вселенной, которая вызвала reify. Это возможно, потому что это макрос, поэтому он может генерировать любой код, который пожелает.

* Результат компиляции и выполнения результата reifyTree будет prefix, который необходимо явно передать. Это происходит, потому что Вселенная результата вычисления находится на другом метауровне, чем контекст, вызвавший reify.

Типичное использование этой функции заключается в сохранении некоторых деревьев, полученных/созданных макросом, в форме, которую можно просмотреть (с помощью сопоставления с образцом) или скомпилировать/выполнить (с помощью рефлективного инструментария) во время выполнения.

Definition Classes
Reifiers

абстрактный def reifyType(universe: Tree, mirror: Tree, tpe: Type, concrete: Boolean = false): Tree

В заданном типе, сгенерировать дерево, которое при компиляции и выполнении произведёт исходный тип. Сгенерированное дерево будет связано со специфицированными universe и mirror. Для получения дополнительной информации и примеров, обратитесь к документации для Context.reifyTree и Universe.reify.

Definition Classes
Reifiers

абстрактный def settings: List[String]

Выводит специфичные для макроса настройки в виде списка строк. Эти настройки передаются компилятору через командную строку "-Xmacro-settings:setting1,setting2...,settingN".

Definition Classes
Infrastructure

абстрактный def typecheck(tree: Tree, mode: TypecheckMode = TERMmode, pt: Type = universe.WildcardType, silent: Boolean = false, withImplicitViewsDisabled: Boolean = false, withMacrosDisabled: Boolean = false): Tree

Проверяет заданное дерево на соответствие ожидаемому типу pt в контексте макро-вызова во время проверки типов с режимом проверки, указанном в mode по умолчанию в режиме TERMmode. Это заполняет символы и типы дерева и, возможно, преобразует его для отражения определенных десугаринг-преобразований.

Если silent ложно, TypecheckException будет брошен в случае ошибки проверки типов. Если silent истинно, проверка типов будет тихой и вернёт EmptyTree в случае ошибки. Такие ошибки не исчезают и могут быть проверены, включив -Ymacro-debug-verbose. В отличие от inferImplicitValue и inferImplicitView, silent по умолчанию ложно.

Проверку типов можно настроить с помощью следующих необязательных параметров: withImplicitViewsDisabled рекурсивно запрещает неявные представления (хотя неявные значения все равно будут найдены и заполнены), значение по умолчанию – ложь withMacrosDisabled рекурсивно запрещает расширение макросов и макро-базируемые неявные представления, значение по умолчанию – ложь.

Definition Classes
Typers
Exceptions thrown

абстрактный val universe: Universe

абстрактный def unreifyTree(tree: Tree): Tree

Отменяет реификацию дерева.

Это обращение не просто восстанавливает исходное дерево (это потеряло бы контекст реификации), а делает что-то более сложное, что соответствует следующим законам:

1) unreifyTree(reifyTree(tree)) != tree // деифицированное дерево — это дерево + сохранённый контекст // в текущей реализации результат unreify является непрозрачным // т. е. нет возможности просмотреть базовое дерево/контекст

2) reifyTree(unreifyTree(reifyTree(tree))) == reifyTree(tree) // результат реификации дерева в его исходном контексте равен // результату реификации дерева вместе с его сохранённым контекстом

3) compileAndEval(unreifyTree(reifyTree(tree))) ~ compileAndEval(tree) // во время выполнения исходное и деифицированное деревья поведенчески эквивалентны

Definition Classes
Reifiers

abstract def untypecheck(tree: Tree): Tree

В текущей реализации API отражения Scala, нетипизированные деревья (также известные как деревья-парсеры или деревья без атрибутов) наблюдательно отличаются от типизированных деревьев (также известные как деревья-тайперы, проверенные на тип деревья или деревья с атрибутами),

Обычно, если какой-то API компилятора принимает дерево, то подойдут как нетипизированные, так и типизированные деревья. Однако в некоторых случаях подходят только нетипизированные или только типизированные деревья. Например, eval принимает только нетипизированные деревья, и можно вставлять только типизированные деревья внутри типизированных деревьев. Поэтому в текущем API отражения есть необходимость в функциях, которые переключаются между нетипизированными и типизированными деревьями. Для этого у нас есть typecheck и untypecheck.

Обратите внимание, что untypecheck в настоящее время страдает от проблемы https://github.com/scala/bug/issues/5464, из-за которой иногда деревья повреждаются, так что они больше не имеют смысла. К сожалению, обходного пути для этого нет. Мы планируем исправить эту проблему в ближайшее время, но пока, пожалуйста, имейте это в виду.

Definition Classes
Typers
See also

http://stackoverflow.com/questions/20936509/scala-macros-what-is-the-difference-between-typed-aka-typechecked-an-untyped

abstract def warning(pos: Position, msg: String): Unit

Выводит предупреждение. Используйте enclosingPosition если вы сомневаетесь, какую позицию передать в pos.

Definition Classes
FrontEnds

abstract def enclosingClass: Tree

Дерево, соответствующее окружающему классу, или EmptyTree, если это не применимо.

Definition Classes
Enclosures
Annotations
@deprecated
Deprecated

(Since version 2.11.0) c.enclosingTree-style APIs are now deprecated; consult the scaladoc for more information

See also

scala.reflect.macros.Enclosures

abstract def enclosingDef: Universe.DefDef

Дерево, соответствующее окружающему дереву DefDef. Выбрасывает EnclosureException если нет такого окружающего дерева.

Definition Classes
Enclosures
Annotations
@deprecated
Deprecated

(Since version 2.11.0) c.enclosingTree-style APIs are now deprecated; consult the scaladoc for more information

See also

scala.reflect.macros.Enclosures

abstract def enclosingImpl: Universe.ImplDef

Дерево, соответствующее окружающему дереву ImplDef (т.е. либо ClassDef, либо ModuleDef). Выбрасывает EnclosureException если нет такого окружающего дерева.

Definition Classes
Enclosures
Annotations
@deprecated
Deprecated

(Since version 2.11.0) c.enclosingTree-style APIs are now deprecated; consult the scaladoc for more information

See also

scala.reflect.macros.Enclosures

abstract def enclosingMethod: Tree

Дерево, соответствующее окружающему методу, или EmptyTree, если это не применимо.

Definition Classes
Enclosures
Annotations
@deprecated
Deprecated

(Since version 2.11.0) c.enclosingTree-style APIs are now deprecated; consult the scaladoc for more information

See also

scala.reflect.macros.Enclosures

abstract def enclosingPackage: Universe.PackageDef

Дерево, соответствующее окружающему дереву PackageDef. Выбрасывает EnclosureException если нет такого окружающего дерева.

Definition Classes
Enclosures
Annotations
@deprecated
Deprecated

(Since version 2.11.0) c.enclosingTree-style APIs are now deprecated; consult the scaladoc for more information

See also

scala.reflect.macros.Enclosures

abstract def enclosingRun: Run

Сеанс компиляции, содержащий это применение макроса.

Definition Classes
Enclosures
Annotations
@deprecated
Deprecated

(Since version 2.11.0) c.enclosingTree-style APIs are now deprecated; consult the scaladoc for more information

See also

scala.reflect.macros.Enclosures

абстрактный def enclosingTemplate: Universe.Template

Дерево, соответствующее дереву Шаблона, содержащему эту функцию. Возвращает EnclosureException, если такого дерева нет.

Определения классов
Enclosures
Аннотации
@deprecated
Устарело

(С версии 2.11.0) API в стиле c.enclosingTree теперь устарело; обратитесь к scaladoc для получения дополнительной информации

См. также

scala.reflect.macros.Enclosures

абстрактный def enclosingUnit: CompilationUnit

Единица компиляции, содержащая это применение макроса.

Определения классов
Enclosures
Аннотации
@deprecated
Устарело

(С версии 2.11.0) API в стиле c.enclosingTree теперь устарело; обратитесь к scaladoc для получения дополнительной информации

См. также

scala.reflect.macros.Enclosures

абстрактный def fresh[NameType <: Name](name: NameType): NameType

Создаёт более или менее уникальное имя, имеющее заданное имя в качестве префикса и тот же тип (имя переменной или имя типа), что и заданное имя. Обратитесь к scala.reflect.macros.Names для получения дополнительной информации об уникальности таких имён.

Определения классов
Names
Аннотации
@deprecated
Устарело

(С версии 2.11.0) используйте freshName вместо

абстрактный def fresh(name: String): String

Создаёт строку, представляющую более или менее уникальное имя, имеющее заданный префикс. Обратитесь к scala.reflect.macros.Names для получения дополнительной информации об уникальности таких имён.

Определения классов
Names
Аннотации
@deprecated
Устарело

(С версии 2.11.0) используйте freshName вместо

абстрактный def fresh(): String

Создаёт строку, представляющую более или менее уникальное имя. Обратитесь к scala.reflect.macros.Names для получения дополнительной информации об уникальности таких имён.

Определения классов
Names
Аннотации
@deprecated
Устарело

(С версии 2.11.0) используйте freshName вместо

абстрактный def literal(x: Char): Expr[Char]

Краткая запись для Literal(Constant(x: Char)) в базовом universe.

Определения классов
ExprUtils
Аннотации
@deprecated
Устарело

(С версии 2.11.0) используйте quasiquotes вместо

абстрактный def literal(x: String): Expr[String]

Краткая запись для Literal(Constant(x: String)) в базовом universe.

Определения классов
ExprUtils
Аннотации
@deprecated
Устарело

(С версии 2.11.0) используйте quasiquotes вместо

абстрактный def literal(x: Double): Expr[Double]

Краткая запись для Literal(Constant(x: Double)) в базовом universe.

Определения классов
ExprUtils
Аннотации
@deprecated
Устарело

(С версии 2.11.0) используйте quasiquotes вместо

абстрактный def literal(x: Float): Expr[Float]

Краткая запись для Literal(Constant(x: Float)) в базовом universe.

Определения классов
ExprUtils
Аннотации
@deprecated
Устарело

(С версии 2.11.0) используйте quasiquotes вместо

абстрактный def literal(x: Long): Expr[Long]

Сокращенная запись для Literal(Constant(x: Long)) в базовом universe.

Определяющие классы
ExprUtils
Аннотации
@deprecated
Устарело

(Начиная с версии 2.11.0) используйте quasiquotes вместо этого

abstract def literal(x: Int): Expr[Int]

Сокращенная запись для Literal(Constant(x: Int)) в базовом universe.

Определяющие классы
ExprUtils
Аннотации
@deprecated
Устарело

(Начиная с версии 2.11.0) используйте quasiquotes вместо этого

abstract def literal(x: Short): Expr[Short]

Сокращенная запись для Literal(Constant(x: Short)) в базовом universe.

Определяющие классы
ExprUtils
Аннотации
@deprecated
Устарело

(Начиная с версии 2.11.0) используйте quasiquotes вместо этого

abstract def literal(x: Byte): Expr[Byte]

Сокращенная запись для Literal(Constant(x: Byte)) в базовом universe.

Определяющие классы
ExprUtils
Аннотации
@deprecated
Устарело

(Начиная с версии 2.11.0) используйте quasiquotes вместо этого

abstract def literal(x: Boolean): Expr[Boolean]

Сокращенная запись для Literal(Constant(x: Boolean)) в базовом universe.

Определяющие классы
ExprUtils
Аннотации
@deprecated
Устарело

(Начиная с версии 2.11.0) используйте quasiquotes вместо этого

abstract def literalFalse: Expr[Boolean]

Сокращенная запись для Literal(Constant(false)) в базовом universe.

Определяющие классы
ExprUtils
Аннотации
@deprecated
Устарело

(Начиная с версии 2.11.0) используйте quasiquotes вместо этого

abstract def literalNull: Expr[Null]

Сокращенная запись для Literal(Constant(null)) в базовом universe.

Определяющие классы
ExprUtils
Аннотации
@deprecated
Устарело

(Начиная с версии 2.11.0) используйте quasiquotes вместо этого

abstract def literalTrue: Expr[Boolean]

Сокращенная запись для Literal(Constant(true)) в базовом universe.

Определяющие классы
ExprUtils
Аннотации
@deprecated
Устарело

(Начиная с версии 2.11.0) используйте quasiquotes вместо этого

abstract def literalUnit: Expr[Unit]

Сокращенная запись для Literal(Constant(())) в базовом universe.

Определяющие классы
ExprUtils
Аннотации
@deprecated
Устарело

(Начиная с версии 2.11.0) используйте quasiquotes вместо этого

abstract def resetLocalAttrs(tree: Tree): Tree

Рекурсивно сбрасывает локально определенные символы и типы в заданном дереве. ВНИМАНИЕ: Не используйте этот API, используйте untypecheck вместо этого.

Определяющие классы
Typers
Аннотации
@deprecated
Устарело

(Начиная с версии 2.11.0) используйте c.untypecheck вместо этого

Члены конкретных значений

final def !=(arg0: Any): Boolean

Определение классов
AnyRef → Any

final def ##(): Int

Определение классов
AnyRef → Any

def +(other: String): String

Неявный
Этот член добавлен неявным преобразованием из Context вany2stringadd[Context] с помощью метода any2stringadd в scala.Predef.
Определение классов
any2stringadd

def ->[B](y: B): (Context, B)

Неявный
Этот член добавлен неявным преобразованием из Context вArrowAssoc[Context] с помощью метода ArrowAssoc в scala.Predef.
Определение классов
ArrowAssoc
Аннотации
@inline()

final def ==(arg0: Any): Boolean

Определение классов
AnyRef → Any

val Expr: Universe.Expr.type

Конструктор/экстрактор для Expr.

Определение классов
Aliases

val TypeTag: Universe.TypeTag.type

Конструктор/экстрактор для TypeTag.

Определение классов
Aliases

val TypecheckException: macros.TypecheckException.type

Определение классов
Typers
См. также

scala.reflect.macros.TypecheckException

val WeakTypeTag: Universe.WeakTypeTag.type

Конструктор/экстрактор для WeakTypeTag.

Определение классов
Aliases

final def asInstanceOf[T0]: T0

Определение классов
Any

def clone(): AnyRef

Атрибуты
protected[java.lang]
Определение классов
AnyRef
Аннотации
@throws(classOf[java.lang.CloneNotSupportedException]) @native()

def ensuring(cond: (Context) => Boolean, msg: => Any): Context

Неявный
Этот член добавлен неявным преобразованием из Context вEnsuring[Context] с помощью метода Ensuring в scala.Predef.
Определение классов
Ensuring

def ensuring(cond: (Context) => Boolean): Context

Неявный
Этот член добавлен неявным преобразованием из Context вEnsuring[Context] с помощью метода Ensuring в scala.Predef.
Определение классов
Ensuring

def ensuring(cond: Boolean, msg: => Any): Context

Неявный
Этот член добавлен неявным преобразованием из Context вEnsuring[Context] с помощью метода Ensuring в scala.Predef.
Определение классов
Ensuring

def ensuring(cond: Boolean): Context

Неявный
Этот член добавлен неявным преобразованием из Context вEnsuring[Context] выполненным методом Ensuring в scala.Predef.
Классы определений
Ensuring

final def eq(arg0: AnyRef): Boolean

Классы определений
AnyRef

def equals(arg0: AnyRef): Boolean

Классы определений
AnyRef → Any

def finalize(): Unit

Атрибуты
protected[java.lang]
Классы определений
AnyRef
Аннотации
@throws(classOf[java.lang.Throwable])

def formatted(fmtstr: String): String

Неявный
Этот член добавлен неявным преобразованием из Context вStringFormat[Context] выполненным методом StringFormat в scala.Predef.
Классы определений
StringFormat
Аннотации
@inline()

final def getClass(): Class[_ <: AnyRef]

Классы определений
AnyRef → Any
Аннотации
@native()

def hashCode(): Int

Классы определений
AnyRef → Any
Аннотации
@native()

final def isInstanceOf[T0]: Boolean

Классы определений
Any

final def ne(arg0: AnyRef): Boolean

Классы определений
AnyRef

final def notify(): Unit

Классы определений
AnyRef
Аннотации
@native()

final def notifyAll(): Unit

Классы определений
AnyRef
Аннотации
@native()

def symbolOf[T](implicit arg0: WeakTypeTag[T]): Universe.TypeSymbol

Символ типа x, полученный из тега типа.

Классы определений
Aliases

final def synchronized[T0](arg0: => T0): T0

Классы определений
AnyRef

def toString(): String

Классы определений
AnyRef → Any

def typeOf[T](implicit ttag: TypeTag[T]): Type

Сокращение для implicitly[TypeTag[T]].tpe

Классы определений
Aliases

def typeTag[T](implicit ttag: TypeTag[T]): TypeTag[T]

Сокращение для implicitly[TypeTag[T]]

Классы определений
Aliases

final def wait(): Unit

Классы определений
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException])

final def wait(arg0: Long, arg1: Int): Unit

Определяющие классы
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException])

final def wait(arg0: Long): Unit

Определяющие классы
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException]) @native()

def weakTypeOf[T](implicit attag: WeakTypeTag[T]): Type

Сокращение для implicitly[WeakTypeTag[T]].tpe

Определяющие классы
Aliases

def weakTypeTag[T](implicit attag: WeakTypeTag[T]): WeakTypeTag[T]

Сокращение для implicitly[WeakTypeTag[T]]

Определяющие классы
Aliases

© 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/blackbox/Context.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API