Spec-Zone.ru › Scala 2.13 Reflection

Trait scala.reflect.api.Trees

trait Trees extends AnyRef

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

Этот трейт определяет типы узлов, используемых в деревьях абстрактной синтаксической структуры (AST) Scala, и операции над ними.

Деревья — основа абстрактной синтаксической структуры Scala, используемой для представления программ. Также их называют деревьями абстрактной синтаксической структуры, часто сокращенно — AST.

В API отражения Scala, использующие или производящие Tree:

  • Аннотации, использующие деревья для представления своих аргументов, доступные в Annotation.scalaArgs.
  • reify, специальный метод в scala.reflect.api.Universe, который принимает выражение и возвращает AST, представляющий это выражение.
  • Макросы и компиляция во время выполнения с помощью инструментов, оба использующие деревья в качестве средства представления программы.

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

Примеры

Следующее создает AST, представляющий литерал 5 в исходном коде Scala:

Literal(Constant(5))

Следующее создает AST, представляющий print("Hello World"):

Apply(Select(Select(This(TypeName("scala")), TermName("Predef")), TermName("print")), List(Literal(Constant("Hello World"))))

Следующее создает AST из литерала 5, а затем использует showRaw для вывода его в удобочитаемом формате.

import scala.reflect.runtime.universe.{ reify, showRaw }
print( showRaw( reify{5}.tree ) )` // prints Literal(Constant(5))

Для получения дополнительной информации об Tree см. Руководство по отражению: Символы, Деревья, Типы.

Self Type
Universe
Source
Trees.scala
Линейные супертипы
AnyRef, Any
Известные подклассы
JavaUniverse, Universe, Universe

Члены типов

abstract тип Alternative >: Null <: Universe.AlternativeApi with Universe.TermTree

Альтернативы шаблонов.

Устраняются фазами компилятора Eliminated by compiler phases patmat (в новом шаблоне совпадения 2.10) или explicitouter (в старом шаблоне совпадения до 2.10), за исключением случаев, когда они используются в закодированных операторах Switch (т. е. остающихся Match(CaseDef(...)))

тракт AlternativeApi extends Universe.TermTreeApi

abstract класс AlternativeExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом с синтаксисом Alternative(trees). Этот узел AST соответствует следующему коду Scala:

pat1 | ... | patn

abstract тип Annotated >: Null <: Universe.AnnotatedApi with Universe.Tree

Дерево, к которому прикреплена аннотация. Используется только для аннотированных типов и присвоений аннотаций; аннотации определений хранятся в Modifiers. Удаляется типовой проверяющим (typedAnnotated), а аннотации затем сохраняются в AnnotatedType.

тракт AnnotatedApi extends Universe.TreeApi

abstract класс AnnotatedExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом с синтаксисом Annotated(annot, arg). Этот узел AST соответствует следующему коду Scala:

arg @annot // для типов arg: @annot // для выражений

abstract тип AppliedTypeTree >: Null <: Universe.AppliedTypeTreeApi with Universe.TypTree

тракт AppliedTypeTreeApi extends Universe.TypTreeApi

abstract класс AppliedTypeTreeExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом с синтаксисом AppliedTypeTree(tpt, args). Этот узел AST соответствует следующему коду Scala:

tpt[args]

Должен использоваться только с узлами tpt, которые являются типами, то есть у которых isType возвращает true. В противном случае следует использовать TypeApply.

List[Int] как в val x: List[Int] = ??? // представлено как AppliedTypeTree(Ident(<List>), List(TypeTree(<Int>)))

def foo[T] = ??? foo[Int] // представлено как TypeApply(Ident(<foo>), List(TypeTree(<Int>)))

abstract тип Apply >: Null <: Universe.ApplyApi with Universe.GenericApply

тракт ApplyApi extends Universe.GenericApplyApi

abstract класс ApplyExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом с синтаксисом Apply(fun, args). Этот узел AST соответствует следующему коду Scala:

fun(args)

Например:

fun[targs](args)

Выражается как:

Apply(TypeApply(fun, targs), args)

abstract тип Assign >: Null <: Universe.AssignApi with Universe.TermTree

тракт AssignApi extends Universe.TermTreeApi

abstract класс AssignExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом с синтаксисом Assign(lhs, rhs). Этот узел AST соответствует следующему коду Scala:

lhs = rhs

abstract тип Bind >: Null <: Universe.BindApi with Universe.DefTree

Связывание переменной с шаблоном правой части.

Устраняется фазами компилятора patmat (в новом шаблоне совпадения 2.10) или explicitouter (в старом шаблоне совпадения до 2.10).

trait BindApi extends Universe.DefTreeApi

abstract class BindExtractor extends AnyRef

Класс экстрактора для создания и сопоставления с образцом с помощью синтаксиса Bind(name, body). Этот узел AST соответствует следующему коду Scala:

pat*

abstract type Block >: Null <: Universe.BlockApi with Universe.TermTree

trait BlockApi extends Universe.TermTreeApi

abstract class BlockExtractor extends AnyRef

Класс экстрактора для создания и сопоставления с образцом с помощью синтаксиса Block(stats, expr). Этот узел AST соответствует следующему коду Scala:

{ stats; expr }

Если блок пуст, то expr устанавливается в Literal(Constant(())).

abstract type CaseDef >: Null <: Universe.CaseDefApi with Universe.Tree

Пункт case в сопоставлении с образцом (за исключением вхождений в операторах switch). Удаляется компилятором на этапах patmat (в новом механизме сопоставления с образцом в 2.10) или explicitouter (в старом механизме сопоставления с образцом до 2.10)

trait CaseDefApi extends Universe.TreeApi

abstract class CaseDefExtractor extends AnyRef

Класс экстрактора для создания и сопоставления с образцом с помощью синтаксиса CaseDef(pat, guard, body). Этот узел AST соответствует следующему коду Scala:

case pat if guard => body

Если guard отсутствует, то guard устанавливается в EmptyTree. Если body не указан, то body устанавливается в Literal(Constant(()))

abstract type ClassDef >: Null <: Universe.ClassDefApi with Universe.ImplDef

trait ClassDefApi extends Universe.ImplDefApi

abstract class ClassDefExtractor extends AnyRef

Класс экстрактора для создания и сопоставления с образцом с помощью синтаксиса ClassDef(mods, name, tparams, impl). Этот узел AST соответствует следующему коду Scala:

mods class name [tparams] impl

Где impl означает:

extends parents { defs }

abstract type CompoundTypeTree >: Null <: Universe.CompoundTypeTreeApi with Universe.TypTree

Пересечение типов <parent1> with ... with <parentN> { <decls> }, удаляется RefCheck

trait CompoundTypeTreeApi extends Universe.TypTreeApi

abstract class CompoundTypeTreeExtractor extends AnyRef

Класс экстрактора для создания и сопоставления с образцом с помощью синтаксиса CompoundTypeTree(templ). Этот узел AST соответствует следующему коду Scala:

parent1 with ... with parentN { refinement }

abstract type DefDef >: Null <: Universe.DefDefApi with Universe.ValOrDefDef

trait DefDefApi extends Universe.ValOrDefDefApi

abstract class DefDefExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса DefDef(mods, name, tparams, vparamss, tpt, rhs). Этот узел AST соответствует следующему коду Scala:

mods def name[tparams](vparams_1)...(vparams_n): tpt = rhs

Если тип возвращаемого значения не указан явно (т.е. должен быть выведен), это выражается наличием tpt , установленным в TypeTree() (но не в EmptyTree!).

abstract тип DefTree >: Null <: Universe.DefTreeApi with Universe.SymTree with Universe.NameTree

тракт DefTreeApi extends Universe.SymTreeApi with Universe.NameTreeApi

abstract тип ExistentialTypeTree >: Null <: Universe.ExistentialTypeTreeApi with Universe.TypTree

тракт ExistentialTypeTreeApi extends Universe.TypTreeApi

abstract класс ExistentialTypeTreeExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса ExistentialTypeTree(tpt, whereClauses). Этот узел AST соответствует следующему коду Scala:

tpt forSome { whereClauses }

abstract тип Function >: Null <: Universe.FunctionApi with Universe.TermTree with Universe.SymTree

тракт FunctionApi extends Universe.TermTreeApi with Universe.SymTreeApi

abstract класс FunctionExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса Function(vparams, body). Этот узел AST соответствует следующему коду Scala:

vparams => body

Символ функции — это синтетический TermSymbol. Он является владельцем параметров функции.

abstract тип GenericApply >: Null <: Universe.GenericApplyApi with Universe.TermTree

тракт GenericApplyApi extends Universe.TermTreeApi

abstract тип Ident >: Null <: Universe.IdentApi with Universe.RefTree

тракт IdentApi extends Universe.RefTreeApi

abstract класс IdentExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса Ident(qual, name). Этот узел AST соответствует следующему коду Scala:

name

Проверяющий типов преобразует идентификаторы, которые ссылаются на вложенные поля или методы, в выборки. Например, name ==> this.name

abstract тип If >: Null <: Universe.IfApi with Universe.TermTree

тракт IfApi extends Universe.TermTreeApi

abstract класс IfExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса If(cond, thenp, elsep). Этот узел AST соответствует следующему коду Scala:

if (cond) thenp else elsep

Если альтернатива отсутствует, elsep устанавливается в значение Literal(Constant(())).

abstract type ImplDef >: Null <: Universe.ImplDefApi with Universe.MemberDef

trait ImplDefApi extends Universe.MemberDefApi

abstract type Import >: Null <: Universe.ImportApi with Universe.SymTree

trait ImportApi extends Universe.SymTreeApi

abstract class ImportExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса Import(expr, selectors). Этот узел AST соответствует следующему коду Scala:

import expr.{selectors}

Селекторы — список ImportSelectors, которые концептуально являются парами имён (from, to). Последнее (и возможно, единственное имя) может быть nme.WILDCARD. Например:

import qual.{w => _, x, y => z, _}

Будет представлено как:

Import(qual, List(("w", WILDCARD), ("x", "x"), ("y", "z"), (WILDCARD, null)))

Символ Import — это символ импорта @see Symbol.newImport. Он используется в основном для проверки того, что импорт был проанализирован по типам.

abstract type ImportSelector >: Null <: Universe.ImportSelectorApi

Селектор импорта (не дерево, но компонент дерева Import)

Представление импортируемого имени, его необязательного переименования и их необязательных позиций

Удаляется на этапе анализа по типам.

trait ImportSelectorApi extends AnyRef

abstract class ImportSelectorExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса ImportSelector(name, namePos, rename, renamePos). Это не узел AST, он используется как часть узла Import.

abstract type LabelDef >: Null <: Universe.LabelDefApi with Universe.DefTree with Universe.TermTree

Метка выражения. Не выражается в синтаксисе языка, но генерируется компилятором для имитации циклов while/do-while, а также для сопоставления с образцом.

Метка ведет себя как вложенная функция, где params представляет входные параметры. Символ, присваиваемый LabelDef, должен иметь MethodType, как если бы он был вложенной функцией.

Переходы — это узлы apply, приписанные символу метки. Аргументы из узла apply будут переданы метке и присвоены идентификаторам.

Разрешены прямые переходы в пределах блока.

trait LabelDefApi extends Universe.DefTreeApi with Universe.TermTreeApi

abstract class LabelDefExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса LabelDef(name, params, rhs).

Этот узел AST не имеет непосредственного соответствия в коде Scala. Он используется для хвостовых вызовов и т. п. Например, while/do преобразуются в определения меток следующим образом:

while (cond) body ==> LabelDef($L, List(), if (cond) { body; L$() } else ())
do body while (cond) ==> LabelDef($L, List(), body; if (cond) L$() else ())

abstract type Literal >: Null <: Universe.LiteralApi with Universe.TermTree

trait LiteralApi extends Universe.TermTreeApi

abstract class LiteralExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса Literal(value). Этот узел AST соответствует следующему коду Scala:

value

abstract type Match >: Null <: Universe.MatchApi with Universe.TermTree

- Выражение сопоставления с образцом (до стадии компиляции, explicitouter до 2.10 / patmat с 2.10)

    Управляющие конструкции switch (после стадии компиляции, explicitouter до 2.10 / patmat с 2.10)

После стадии компиляции explicitouter до 2.10 / patmat с 2.10, ветви будут удовлетворять следующим ограничениям:

    все условия EmptyTree,все шаблоны будут либо Literal(Constant(x:Int)) или Alternative(lit|...|lit) за исключением ветви «иначе», у которой шаблон Ident(nme.WILDCARD)

тракт MatchApi extends Universe.TermTreeApi

абстрактный класс MatchExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом с синтаксисом Match(selector, cases). Этот узел AST соответствует следующему коду Scala:

селектор match { ветви }

Match также используется в операциях присваивания с сопоставлением с образцом, таких как val (foo, bar) = baz.

абстрактный тип MemberDef >: Null <: Universe.MemberDefApi with Universe.DefTree

тракт MemberDefApi extends Universe.DefTreeApi

абстрактный тип Modifiers >: Null <: Universe.ModifiersApi

абстрактный класс ModifiersApi extends AnyRef

абстрактный класс ModifiersExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом с синтаксисом Modifiers(flags, privateWithin, annotations). Модификаторы содержат флаги, атрибуты видимости и аннотации Scala для определений членов.

абстрактный тип ModuleDef >: Null <: Universe.ModuleDefApi with Universe.ImplDef

Определение объекта, например, object Foo. Внутренне объекты часто называют модулями, чтобы избежать неоднозначности. Устранён на фазе компиляции refcheck.

тракт ModuleDefApi extends Universe.ImplDefApi

абстрактный класс ModuleDefExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом с синтаксисом ModuleDef(mods, name, impl). Этот узел AST соответствует следующему коду Scala:

mods object имя impl

Где impl обозначает:

extends родители { определения }

абстрактный тип NameTree >: Null <: Universe.NameTreeApi with Universe.Tree

Узел дерева, содержащий имя, например, определяя его (DefTree) или ссылаясь на него (RefTree).

тракт NameTreeApi extends Universe.TreeApi

абстрактный тип NamedArg >: Null <: Universe.NamedArgApi with Universe.TermTree

Присваивание или именованный аргумент. Появляется только в списках аргументов, удаляется на фазе компиляции typecheck (doTypedApply), восстанавливается реификатором.

тракт NamedArgApi extends Universe.TermTreeApi

абстрактный класс NamedArgExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом с синтаксисом NamedArg(lhs, rhs). Этот узел AST соответствует следующему коду Scala:

m.f(lhs = rhs)
@annotation(lhs = rhs)

абстрактный тип New >: Null <: Universe.NewApi with Universe.TermTree

тракт NewApi extends Universe.TermTreeApi

абстрактный класс NewExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса New(tpt). Этот узел AST соответствует следующему коду Scala:

new T

Этот узел всегда встречается в следующем контексте:

(new tpt).<init>[targs](args)

Например, представление AST для:

new Example[Int](2)(3)

выглядит следующим образом:

Apply( Apply( TypeApply( Select(New(TypeTree(typeOf[Example])), nme.CONSTRUCTOR) TypeTree(typeOf[Int])), List(Literal(Constant(2)))), List(Literal(Constant(3))))

абстрактный тип PackageDef >: Null <: Universe.PackageDefApi with Universe.MemberDef

тракт PackageDefApi extends Universe.MemberDefApi

абстрактный класс PackageDefExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса PackageDef(pid, stats). Этот узел AST соответствует следующему коду Scala:

package pid { stats }

абстрактный тип RefTree >: Null <: Universe.RefTreeApi with Universe.SymTree with Universe.NameTree

Узел, ссылающийся на сущность, имеющую символ. Ссылается на одну, а не определяет её; определения находятся в DefTrees.

тракт RefTreeApi extends Universe.SymTreeApi with Universe.NameTreeApi

абстрактный класс RefTreeExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса RefTree(qual, name). Этот узел AST соответствует либо Ident, либо Select, либо SelectFromTypeTree.

абстрактный тип Return >: Null <: Universe.ReturnApi with Universe.SymTree with Universe.TermTree

тракт ReturnApi extends Universe.TermTreeApi

абстрактный класс ReturnExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса Return(expr). Этот узел AST соответствует следующему коду Scala:

return expr

Символ узла Return — это метод, его окружающий.

абстрактный тип Select >: Null <: Universe.SelectApi with Universe.RefTree

Выбор члена <qualifier> . <name>

тракт SelectApi extends Universe.RefTreeApi

абстрактный класс SelectExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса Select(qual, name). Этот узел AST соответствует следующему коду Scala:

qualifier.selector

Должен использоваться только с узлами qualifier являющимися терминами, то есть которые имеют isTerm возвращающие true. В противном случае следует использовать SelectFromTypeTree.

foo.Bar // представлено как Select(Ident(<foo>), <Bar>) Foo#Bar // представлено как SelectFromTypeTree(Ident(<Foo>), <Bar>)

абстрактный тип SelectFromTypeTree >: Null <: Universe.SelectFromTypeTreeApi with Universe.TypTree with Universe.RefTree

тракт SelectFromTypeTreeApi extends Universe.TypTreeApi with Universe.RefTreeApi

abstract class SelectFromTypeTreeExtractor extends AnyRef

An extractor class to create and pattern match with syntax SelectFromTypeTree(qualifier, name). This AST node corresponds to the following Scala code:

qualifier # selector

Note: a path-dependent type p.T is expressed as p.type # T

Should only be used with qualifier nodes which are types, i.e. which have isType returning true. Otherwise Select should be used instead.

Foo#Bar // represented as SelectFromTypeTree(Ident(<Foo>), <Bar>) foo.Bar // represented as Select(Ident(<foo>), <Bar>)

abstract type SingletonTypeTree >: Null <: Universe.SingletonTypeTreeApi with Universe.TypTree

trait SingletonTypeTreeApi extends Universe.TypTreeApi

abstract class SingletonTypeTreeExtractor extends AnyRef

An extractor class to create and pattern match with syntax SingletonTypeTree(ref). This AST node corresponds to the following Scala code:

ref.type

abstract type Star >: Null <: Universe.StarApi with Universe.TermTree

Repetition of pattern.

Eliminated by compiler phases patmat (in the new pattern matcher of 2.10) or explicitouter (in the old pre-2.10 pattern matcher).

trait StarApi extends Universe.TermTreeApi

abstract class StarExtractor extends AnyRef

An extractor class to create and pattern match with syntax Star(elem). This AST node corresponds to the following Scala code:

pat*

abstract type Super >: Null <: Universe.SuperApi with Universe.TermTree

Super reference, where qual is the corresponding this reference. A super reference C.super[M] is represented as Super(This(C), M).

trait SuperApi extends Universe.TermTreeApi

abstract class SuperExtractor extends AnyRef

An extractor class to create and pattern match with syntax Super(qual, mix). This AST node corresponds to the following Scala code:

C.super[M]

Which is represented as:

Super(This(C), M)

If mix is empty, it is tpnme.EMPTY.

The symbol of a Super is the class _from_ which the super reference is made. For instance in C.super(...), it would be C.

abstract type SymTree >: Null <: Universe.SymTreeApi with Universe.Tree

A tree that carries a symbol, e.g. by defining it (DefTree) or by referring to it (RefTree). Such trees start their life naked, returning NoSymbol, but after being typechecked without errors they hold non-empty symbols.

trait SymTreeApi extends Universe.TreeApi

abstract type Template >: Null <: Universe.TemplateApi with Universe.SymTree

trait TemplateApi extends Universe.SymTreeApi

abstract class TemplateExtractor extends AnyRef

An extractor class to create and pattern match with syntax Template(parents, self, body). This AST node corresponds to the following Scala code:

extends parents { self => body }

In case when the self-type annotation is missing, it is represented as an empty value definition with nme.WILDCARD as name and NoType as type.

The symbol of a template is a local dummy. @see Symbol.newLocalDummy The owner of the local dummy is the enclosing trait or class. The local dummy is itself the owner of any local blocks. For example:

class C { def foo { // owner is C def bar // owner is local dummy } }

abstract тип TermTree >: Null <: Universe.TermTreeApi with Universe.Tree

Дерево для выражения. Не все деревья, представляющие выражения, являются TermTrees; используйте isTerm для надёжной идентификации выражений.

тракт TermTreeApi extends Universe.TreeApi

abstract тип This >: Null <: Universe.ThisApi with Universe.TermTree with Universe.SymTree

тракт ThisApi extends Universe.TermTreeApi with Universe.SymTreeApi

abstract класс ThisExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом с синтаксисом This(qual). Этот узел AST соответствует следующему коду Scala:

qual.this

Символ This — это класс, к которому относится this. Например, в C.this это будет C.

abstract тип Throw >: Null <: Universe.ThrowApi with Universe.TermTree

тракт ThrowApi extends Universe.TermTreeApi

abstract класс ThrowExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом с синтаксисом Throw(expr). Этот узел AST соответствует следующему коду Scala:

throw expr

abstract класс Transformer extends AnyRef

класс Traverser extends AnyRef

abstract тип Tree >: Null <: Universe.TreeApi

тракт TreeApi extends Product

API, поддерживаемый всеми деревьями. Основным источником информации о деревьях является страница scala.reflect.api.Trees.

abstract тип TreeCopier >: Null <: Universe.TreeCopierOps

abstract класс TreeCopierOps extends AnyRef

abstract тип Try >: Null <: Universe.TryApi with Universe.TermTree

тракт TryApi extends Universe.TermTreeApi

abstract класс TryExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом с синтаксисом Try(block, catches, finalizer). Этот узел AST соответствует следующему коду Scala:

try block catch { catches } finally finalizer

Если finalizer отсутствует, finalizer устанавливается в EmptyTree.

abstract тип TypTree >: Null <: Universe.TypTreeApi with Universe.Tree

Дерево для типа. Не все деревья, представляющие типы, являются TypTrees; используйте isType для надёжной идентификации типов.

тракт TypTreeApi extends Universe.TreeApi

абстрактный тип TypeApply >: Null <: Universe.TypeApplyApi с Universe.GenericApply

тракт TypeApplyApi extends Universe.GenericApplyApi

абстрактный класс TypeApplyExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса TypeApply(fun, args). Этот узел AST соответствует следующему коду Scala:

fun[args]

Должен использоваться только с узлами fun, которые являются терминами, т. е. которые имеют isTerm возвращающее true. В противном случае следует использовать AppliedTypeTree.

def foo[T] = ??? foo[Int] // представлено как TypeApply(Ident(<foo>), List(TypeTree(<Int>)))

List[Int] как в val x: List[Int] = ??? // представлено как AppliedTypeTree(Ident(<List>), List(TypeTree(<Int>)))

абстрактный тип TypeBoundsTree >: Null <: Universe.TypeBoundsTreeApi с Universe.TypTree

тракт TypeBoundsTreeApi extends Universe.TypTreeApi

абстрактный класс TypeBoundsTreeExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса TypeBoundsTree(lo, hi). Этот узел AST соответствует следующему коду Scala:

>: lo <: hi

абстрактный тип TypeDef >: Null <: Universe.TypeDefApi с Universe.MemberDef

Абстрактный тип, параметр типа или псевдоним типа. Удаляется при стирании.

тракт TypeDefApi extends Universe.MemberDefApi

абстрактный класс TypeDefExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса TypeDef(mods, name, tparams, rhs). Этот узел AST соответствует следующему коду Scala:

mods type name[tparams] = rhs

mods type name[tparams] >: lo <: hi

Первое использование иллюстрирует TypeDefs, представляющие псевдонимы типов и параметры типов. Второе использование иллюстрирует TypeDefs, представляющие абстрактные типы, где lo и hi оба TypeBoundsTrees, а Modifier.deferred установлено в mods.

абстрактный тип TypeTree >: Null <: Universe.TypeTreeApi с Universe.TypTree

Синтетическое дерево, содержащее произвольный тип. Не следует путать с TypTree, трактом для деревьев, используемых только для деревьев типов. TypeTree вставлены в нескольких местах, но в основном в RefCheck, где все произвольные деревья типов заменены TypeTree.

тракт TypeTreeApi extends Universe.TypTreeApi

абстрактный класс TypeTreeExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса TypeTree(). Этот узел AST не имеет прямого соответствия коду Scala и выводится везде, когда мы хотим обернуть Type в Tree.

абстрактный тип Typed >: Null <: Universe.TypedApi с Universe.TermTree

тракт TypedApi extends Universe.TermTreeApi

абстрактный класс TypedExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса Typed(expr, tpt). Этот узел AST соответствует следующему коду Scala:

expr: tpt

абстрактный тип UnApply >: Null <: Universe.UnApplyApi с Universe.TermTree

Используется для представления unapply методов в сопоставлении с образцом.

Например:

2 match { case Foo(x) => x }

Представляется как:

Match(
  Literal(Constant(2)),
  List(
    CaseDef(
      UnApply(
        // a dummy node that carries the type of unapplication to patmat
        // the <unapply-selector> here doesn't have an underlying symbol
        // it only has a type assigned, therefore after `untypecheck` this tree is no longer typeable
        Apply(Select(Ident(Foo), TermName("unapply")), List(Ident(TermName("<unapply-selector>")))),
        // arguments of the unapply => nothing synthetic here
        List(Bind(TermName("x"), Ident(nme.WILDCARD)))),
      EmptyTree,
      Ident(TermName("x")))))

Введено модулем typer. Удалено фазами компиляции patmat (в новом сопоставителе шаблонов 2.10) или explicitouter (в старом сопоставителе шаблонов до 2.10).

trait UnApplyApi extends Universe.TermTreeApi

abstract class UnApplyExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса UnApply(fun, args). Этот узел AST не имеет прямого соответствия в Scala-коде и вводится при проверке типов сопоставлений с образцом и try блоков.

abstract type ValDef >: Null <: Universe.ValDefApi with Universe.ValOrDefDef

В широком смысле, определение значения. Все эти элементы закодированы как ValDefs:

    неизменяемые значения, например, "val x"изменяемые значения, например, "var x" - флаг MUTABLE установлен в modsленивые значения, например, "lazy val x" - флаг LAZY установлен в modsпараметры методов, см. vparamss в scala.reflect.api.Trees#DefDef - флаг PARAM установлен в modsявные типы "self", например, class A { self: Bar => }

trait ValDefApi extends Universe.ValOrDefDefApi

abstract class ValDefExtractor extends AnyRef

Класс-экстрактор для создания и сопоставления с образцом синтаксиса ValDef(mods, name, tpt, rhs). Этот узел AST соответствует любому из следующих фрагментов Scala-кода:

mods val name: tpt = rhs

mods var name: tpt = rhs

mods name: tpt = rhs // в сигнатурах функций и определений методов

self: Bar => // типы "self"

Если тип значения не указан явно (т.е. предполагается вывод), это выражается тем, что tpt имеет значение TypeTree() (но не EmptyTree!).

abstract type ValOrDefDef >: Null <: Universe.ValOrDefDefApi with Universe.MemberDef

trait ValOrDefDefApi extends Universe.MemberDefApi

Абстрактные члены-значения

абстрактный val Alternative: Universe.AlternativeExtractor

абстрактный val Annotated: Universe.AnnotatedExtractor

абстрактный val AppliedTypeTree: Universe.AppliedTypeTreeExtractor

абстрактный val Apply: Universe.ApplyExtractor

абстрактный val Assign: Universe.AssignExtractor

абстрактный val Bind: Universe.BindExtractor

абстрактный val Block: Universe.BlockExtractor

абстрактный val CaseDef: Universe.CaseDefExtractor

абстрактный val ClassDef: Universe.ClassDefExtractor

абстрактный val CompoundTypeTree: Universe.CompoundTypeTreeExtractor

абстрактный val DefDef: Universe.DefDefExtractor

абстрактный val EmptyTree: Universe.Tree

абстрактный val ExistentialTypeTree: Universe.ExistentialTypeTreeExtractor

абстрактный val Function: Universe.FunctionExtractor

абстрактный def Ident(sym: Universe.Symbol): Universe.Ident

абстрактный val Ident: Universe.IdentExtractor

абстрактный val If: Universe.IfExtractor

абстрактный val Import: Universe.ImportExtractor

абстрактный val ImportSelector: Universe.ImportSelectorExtractor

абстрактный val LabelDef: Universe.LabelDefExtractor

абстрактный val Literal: Universe.LiteralExtractor

абстрактный val Match: Universe.MatchExtractor

абстрактный val Modifiers: Universe.ModifiersExtractor

абстрактный val ModuleDef: Universe.ModuleDefExtractor

абстрактный val NamedArg: Universe.NamedArgExtractor

абстрактный val New: Universe.NewExtractor

абстрактный val PackageDef: Universe.PackageDefExtractor

абстрактный val RefTree: Universe.RefTreeExtractor

abstract val Return: Universe.ReturnExtractor

abstract def Select(qualifier: Universe.Tree, sym: Universe.Symbol): Universe.Select

abstract val Select: Universe.SelectExtractor

abstract val SelectFromTypeTree: Universe.SelectFromTypeTreeExtractor

abstract val SingletonTypeTree: Universe.SingletonTypeTreeExtractor

abstract val Star: Universe.StarExtractor

abstract val Super: Universe.SuperExtractor

abstract val Template: Universe.TemplateExtractor

abstract def This(sym: Universe.Symbol): Universe.Tree

abstract val This: Universe.ThisExtractor

abstract val Throw: Universe.ThrowExtractor

abstract val Try: Universe.TryExtractor

abstract val TypeApply: Universe.TypeApplyExtractor

abstract val TypeBoundsTree: Universe.TypeBoundsTreeExtractor

abstract val TypeDef: Universe.TypeDefExtractor

abstract def TypeTree(tp: Universe.Type): Universe.TypeTree

abstract val TypeTree: Universe.TypeTreeExtractor

abstract val Typed: Universe.TypedExtractor

abstract val UnApply: Universe.UnApplyExtractor

abstract val ValDef: Universe.ValDefExtractor

abstract def newLazyTreeCopier: Universe.TreeCopier

abstract def newStrictTreeCopier: Universe.TreeCopier

abstract val noSelfType: Universe.ValDef

abstract val pendingSuperCall: Universe.Apply

abstract def treeToString(tree: Universe.Tree): String

Получение строкового представления дерева

Атрибуты
protected

abstract def Apply(sym: Universe.Symbol, args: Universe.Tree*): Universe.Tree

Фабричный метод для узлов Apply.

Annotations
@deprecated
Deprecated

(Начиная с версии 2.10.1) используйте q"$sym(..$args)" вместо этого

abstract def ApplyConstructor(tpt: Universe.Tree, args: List[Universe.Tree]): Universe.Tree

Список новых аргументов 0-1, основанный на древе типов.

Annotations
@deprecated
Deprecated

(Начиная с версии 2.10.1) используйте q"new $tpt(..$args)" вместо этого

abstract def Bind(sym: Universe.Symbol, body: Universe.Tree): Universe.Bind

Фабричный метод для узлов Bind.

Annotations
@deprecated
Deprecated

(Начиная с версии 2.10.1) используйте канонический конструктор Bind для создания привязки, а затем инициализируйте его символ вручную

abstract def Block(stats: Universe.Tree*): Universe.Block

Фабричный метод для узлов Block. Сглаживает непосредственно вложенные блоки.

Annotations
@deprecated
Deprecated

(Начиная с версии 2.10.1) используйте q"{..$stats}" вместо этого. Вручную сглаживайте непосредственно вложенные блоки, если необходимо

abstract def CaseDef(pat: Universe.Tree, body: Universe.Tree): Universe.CaseDef

Фабричный метод для узлов CaseDef.

Annotations
@deprecated
Deprecated

(Начиная с версии 2.10.1) используйте cq"$pat => $body" вместо этого

abstract def Ident(name: String): Universe.Ident

Фабричный метод для узлов Ident.

Annotations
@deprecated
Deprecated

(Начиная с версии 2.10.1) используйте Ident(TermName(name)) вместо этого

abstract def New(sym: Universe.Symbol, args: Universe.Tree*): Universe.Tree

Список новых аргументов 0-1, основанный на символе.

Annotations
@deprecated
Deprecated

(Начиная с версии 2.10.1) используйте q"new ${sym.toType}(..$args)" вместо этого

abstract def New(tpe: Universe.Type, args: Universe.Tree*): Universe.Tree

Список новых аргументов 0-1, основанный на типе.

Annotations
@deprecated
Deprecated

(Начиная с версии 2.10.1) используйте q"new $tpe(..$args)" вместо этого

abstract def New(tpt: Universe.Tree, argss: List[List[Universe.Tree]]): Universe.Tree

Фабричный метод для создания объекта new tpt(args_1)...(args_n) New(t, as) расширяется до: (new t).<init>(as)

Annotations
@deprecated
Deprecated

(Начиная с версии 2.10.1) используйте q"new $tpt(...$argss)" вместо этого

abstract def Select(qualifier: Universe.Tree, name: String): Universe.Select

Фабричный метод для узлов Select. Предполагается, что строковый аргумент name представляет TermName.

Annotations
@deprecated
Deprecated

(Начиная с версии 2.10.1) используйте Select(tree, TermName(name)) вместо этого

abstract def Super(sym: Universe.Symbol, mix: Universe.TypeName): Universe.Tree

Фабричный метод для узлов Super.

Annotations
@deprecated
Deprecated

(Начиная с версии 2.10.1) используйте q"$sym.super[$mix].x".qualifier вместо этого

abstract def Throw(tpe: Universe.Type, args: Universe.Tree*): Universe.Throw

A factory method for Throw узлы.

Annotations
@deprecated
Deprecated

(Since version 2.10.1) use q"throw new $tpe(..$args)" instead

abstract def Try(body: Universe.Tree, cases: (Universe.Tree, Universe.Tree)*): Universe.Try

A factory method for Try узлы.

Annotations
@deprecated
Deprecated

(Since version 2.10.1) convert cases into casedefs and use q"try $body catch { case ..$newcases }" instead

abstract val emptyValDef: Universe.ValDef

Annotations
@deprecated
Deprecated

(Since version 2.11.0) use noSelfType вместо этого

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

final def !=(arg0: Any): Boolean

Определяющие классы
AnyRef → Any

final def ##(): Int

Определяющие классы
AnyRef → Any

def +(other: String): String

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

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

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

final def ==(arg0: Any): Boolean

Определяющие классы
AnyRef → Any

def Modifiers(flags: Universe.FlagSet): Universe.Modifiers

def Modifiers(flags: Universe.FlagSet, privateWithin: Universe.Name): Universe.Modifiers

lazy val NoMods: Universe.Modifiers

final def asInstanceOf[T0]: T0

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

def clone(): AnyRef

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

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

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

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

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

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

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

def ensuring(cond: Boolean): Trees

Неявный
Этот член добавлен неявным преобразованием из Trees вEnsuring[Trees] с помощью метода 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

Неявный
Этот член добавлен благодаря неявной конверсии из Trees в StringFormat[Trees] с помощью метода 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

def itransform(transformer: Universe.Transformer, tree: Universe.Tree): Universe.Tree

Делегирует стратегию преобразования scala.reflect.internal.Trees, потому что сопоставление с образцом по абстрактным типам, которые у нас есть, снижает производительность.

Атрибуты
protected

final def ne(arg0: AnyRef): Boolean

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

final def notify(): Unit

Определяющие классы
AnyRef
Аннотации
@native()

final def notifyAll(): Unit

Определяющие классы
AnyRef
Аннотации
@native()

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

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

def toString(): String

Определяющие классы
AnyRef → Any

val treeCopy: Universe.TreeCopier

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 xtransform(transformer: Universe.Transformer, tree: Universe.Tree): Universe.Tree

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

Атрибуты
protected

© 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/api/Trees.html

Spec-Zone.ru

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