Trait scala.reflect.api.Trees
trait Trees extends AnyRef
Члены типов
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
def ->[B](y: B): (Trees, B)
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
def ensuring(cond: (Trees) => Boolean): Trees
def ensuring(cond: Boolean, msg: => Any): Trees
def ensuring(cond: Boolean): Trees
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
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
ЭКСПЕРИМЕНТАЛЬНО
Этот трейт определяет типы узлов, используемых в деревьях абстрактной синтаксической структуры (AST) Scala, и операции над ними.
Деревья — основа абстрактной синтаксической структуры Scala, используемой для представления программ. Также их называют деревьями абстрактной синтаксической структуры, часто сокращенно — AST.
В API отражения Scala, использующие или производящие
Tree:Деревья неизменяемы, за исключением трех полей pos, symbol и tpe, которые присваиваются при типизации дерева, чтобы добавить информацию, полученную типизатором.
Примеры
Следующее создает AST, представляющий литерал 5 в исходном коде Scala:
Следующее создает 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см. Руководство по отражению: Символы, Деревья, Типы.