Spec-Zone.ru › Scala 2.13 Reflection

Объект scala.reflect.runtime.JavaUniverse.treeInfo

объект treeInfo extends TreeInfo

Определяющие классы
JavaUniverse → SymbolTable
Источник
JavaUniverse.scala
Линейные супертипы
TreeInfo, AnyRef, Any

Члены типов

классApplied extends AnyRef

Приложения в Scala могут иметь одну из следующих форм:

1) голый ядро: Ident(_) или Select(_, _) или что-то ещё 2) голый ядро с параметрами: TypeApply(core, targs) или AppliedTypeTree(core, targs) 3) применение или несколько применений, обернутых вокруг ядра: Apply(core, _), или Apply(Apply(core, _), _), и т. д.

Этот класс предоставляет различные способы разложения приложений и упрощает их анализ.

***Примеры*** (TypeApply в примерах можно заменить на AppliedTypeTree)

Ident(foo): * callee = Ident(foo) * core = Ident(foo) * targs = Nil * argss = Nil

TypeApply(foo, List(targ1, targ2...)) * callee = TypeApply(foo, List(targ1, targ2...)) * core = foo * targs = List(targ1, targ2...) * argss = Nil

Apply(foo, List(arg1, arg2...)) * callee = foo * core = foo * targs = Nil * argss = List(List(arg1, arg2...))

Apply(Apply(foo, List(arg21, arg22, ...)), List(arg11, arg12...)) * callee = foo * core = foo * targs = Nil * argss = List(List(arg11, arg12...), List(arg21, arg22, ...))

Apply(Apply(TypeApply(foo, List(targs1, targs2, ...)), List(arg21, arg22, ...)), List(arg11, arg12...)) * callee = TypeApply(foo, List(targs1, targs2, ...)) * core = foo * targs = Nil * argss = List(List(arg11, arg12...), List(arg21, arg22, ...))

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

классDynamicApplicationExtractor extends AnyRef

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

абстрактный классSeeThroughBlocks[T] extends AnyRef

Некоторые полезные экстрактры для обнаружения деревьев сквозь туман нерелевантных фигурных скобок: т. е. Block(Nil, SomeTree) не должен мешать нам видеть SomeTree.

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

Члены-значения

final def !=(arg0: Any): Boolean

Definition Classes
AnyRef → Any

final def ##(): Int

Definition Classes
AnyRef → Any

final def ==(arg0: Any): Boolean

Definition Classes
AnyRef → Any

final val SYNTH_CASE_FLAGS: Long(2099200L)

Definition Classes
TreeInfo

def admitsTypeSelection(tree: JavaUniverse.Tree): Boolean

Является ли tree либо типом без модификатора volatile, либо путём, который не включает ни:

    ссылку на переменную/поле с модификатором mutableссылку на параметр по имени by-nameвыбор члена в типе с модификатором volatile (Спецификация: 3.6 Типы volatile)?

Такое дерево подходит для выбора типа.

Definition Classes
TreeInfo

final def asInstanceOf[T0]: T0

Definition Classes
Any

def assignmentToMaybeNamedArg(tree: JavaUniverse.Tree): JavaUniverse.Tree

Преобразует узел Assign(_, _) в NamedArg(_, _) если левая часть — простой идентификатор. Иначе возвращает без изменений.

Definition Classes
TreeInfo

def catchesThrowable(cdef: JavaUniverse.CaseDef): Boolean

Ловит ли этот CaseDef исключение Throwable?

Definition Classes
TreeInfo

def clone(): AnyRef

Attributes
protected[java.lang]
Definition Classes
AnyRef
Annotations
@throws(classOf[java.lang.CloneNotSupportedException]) @native()

def dissectApplied(tree: JavaUniverse.Tree): Applied

Возвращает обёртку, которая знает, как разобрать и проанализировать приложения.

Definition Classes
TreeInfo

def effectivePatternArity(args: List[JavaUniverse.Tree]): Int

//------------------------ => effectivePatternArity(args)
case Extractor(a)          => 1
case Extractor(a, b)       => 2
case Extractor((a, b))     => 2
case Extractor(a @ (b, c)) => 2
Definition Classes
TreeInfo

final def eq(arg0: AnyRef): Boolean

Definition Classes
AnyRef

def equals(arg0: AnyRef): Boolean

Definition Classes
AnyRef → Any

def finalize(): Unit

Attributes
protected[java.lang]
Definition Classes
AnyRef
Annotations
@throws(classOf[java.lang.Throwable])

def firstConstructor(stats: List[JavaUniverse.Tree]): JavaUniverse.Tree

Первое определение конструктора в stats

Definition Classes
TreeInfo

def firstConstructorArgs(stats: List[JavaUniverse.Tree]): List[JavaUniverse.Tree]

Аргументы первого конструктора в stats.

Definition Classes
TreeInfo

final def firstDefinesClassOrObject(trees: List[JavaUniverse.Tree], name: JavaUniverse.Name): Boolean

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

Definition Classes
TreeInfo
Annotations
@tailrec()

def flattenedPatternArgs(args: List[JavaUniverse.Tree]): List[JavaUniverse.Tree]

Definition Classes
TreeInfo

def foreachMethodParamAndArg(params: List[JavaUniverse.Symbol], args: List[JavaUniverse.Tree])(f: (JavaUniverse.Symbol, JavaUniverse.Tree) => Unit): Boolean

Definition Classes
TreeInfo

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

Definition Classes
AnyRef → Any
Annotations
@native()

val global: JavaUniverse.this.type

Definition Classes
treeInfo → TreeInfo

def hasSynthCaseSymbol(t: JavaUniverse.Tree): Boolean

Definition Classes
TreeInfo

def hasUntypedPreSuperFields(stats: List[JavaUniverse.Tree]): Boolean

Definition Classes
TreeInfo

def hasVolatileType(tree: JavaUniverse.Tree): Boolean

Переменная типа tree является переменной? (Игнорируется, если у её символа есть аннотация @uncheckedStable.)

Definition Classes
TreeInfo

def hashCode(): Int

Definition Classes
AnyRef → Any
Annotations
@native()

def isAbsTypeDef(tree: JavaUniverse.Tree): Boolean

Definition Classes
TreeInfo

def isAliasTypeDef(tree: JavaUniverse.Tree): Boolean

Definition Classes
TreeInfo

def isApplyDynamicName(name: JavaUniverse.Name): Boolean

Definition Classes
TreeInfo

def isByNameParamType(tpt: JavaUniverse.Tree): Boolean

Является ли tpt типом параметра по имени в формате => T?

Definition Classes
TreeInfo

def isCatchCase(cdef: JavaUniverse.CaseDef): Boolean

Является ли этот узел шаблона шаблоном перехвата исключений или шаблоном проверки типа?

Definition Classes
TreeInfo

def isConstructorWithDefault(t: JavaUniverse.Tree): Boolean

Definition Classes
TreeInfo

def isDeclarationOrTypeDef(tree: JavaUniverse.Tree): Boolean

Является ли узел объявлением или определением типа?

Definition Classes
TreeInfo

def isDefaultCase(cdef: JavaUniverse.CaseDef): Boolean

Является ли этот узел шаблона универсальным (символом-подстановкой или переменной) шаблоном?

Definition Classes
TreeInfo

def isDefaultGetter(tree: JavaUniverse.Tree): Boolean

Definition Classes
TreeInfo

def isEarlyDef(tree: JavaUniverse.Tree): Boolean

Definition Classes
TreeInfo

def isEarlyValDef(tree: JavaUniverse.Tree): Boolean

Definition Classes
TreeInfo

final def isExprSafeToInline(tree: JavaUniverse.Tree): Boolean

Является ли выражение безопасным для встраивания без изменения семантики программы?

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

Definition Classes
TreeInfo
Annotations
@tailrec()

def isFunctionMissingParamType(tree: JavaUniverse.Tree): Boolean

Definition Classes
TreeInfo

def isGuardedCase(cdef: JavaUniverse.CaseDef): Boolean

Является ли этот случай защищенным?

Definition Classes
TreeInfo

final def isInstanceOf[T0]: Boolean

Definition Classes
Any

def isInterfaceMember(tree: JavaUniverse.Tree): Boolean

Является ли узел допустимым для определения члена интерфейса?

Definition Classes
TreeInfo

def isLiteralString(t: JavaUniverse.Tree): Boolean

Definition Classes
TreeInfo

def isMacroApplication(tree: JavaUniverse.Tree): Boolean

Definition Classes
TreeInfo

final def isMacroApplicationOrBlock(tree: JavaUniverse.Tree): Boolean

Definition Classes
TreeInfo
Annotations
@tailrec()

final def isNullaryInvocation(tree: JavaUniverse.Tree): Boolean

Definition Classes
TreeInfo
Annotations
@tailrec()

def isPartialFunctionMissingParamType(tree: JavaUniverse.Tree): Boolean

Definition Classes
TreeInfo

def isPath(tree: JavaUniverse.Tree, allowVolatile: Boolean): Boolean

Является ли tree путём, определённым следующим образом? (Спецификация: 3.1 Пути)

- Пустой путь ε (который нельзя явно записать в пользовательских программах). - C.this, где C ссылается на класс. - p.x, где p — путь, а x — стабильный член p. - C.super.x или C.super[M].x, где C ссылается на класс, а x ссылается на стабильный член суперкласса или назначенного родительского класса M класса C.

ПРИМЕЧАНИЕ: Деревья с ошибками (в основном) исключаются.

Путь ::= СтабильныйИдентификатор | [id ‘.’] this

Definition Classes
TreeInfo

def isPureDef(tree: JavaUniverse.Tree): Boolean

Является ли дерево чистым (т.е. не вызывающим побочных эффектов) определением?

Definition Classes
TreeInfo

final def isPureExprForWarningPurposes(tree: JavaUniverse.Tree): Boolean

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

Definition Classes
TreeInfo
Annotations
@tailrec()

def isQualifierSafeToElide(tree: JavaUniverse.Tree): Boolean

Definition Classes
TreeInfo

def isRepeatedParamType(tpt: JavaUniverse.Tree): Boolean

Является ли tpt типом с параметром vararg в форме T*?

Definition Classes
TreeInfo

def isSelfConstrCall(tree: JavaUniverse.Tree): Boolean

Является ли tree вызовом конструктора self this(...)? Т.е. вызов конструктора того же объекта?

Definition Classes
TreeInfo

def isSelfOrSuperConstrCall(tree: JavaUniverse.Tree): Boolean

Является ли tree вызовом конструктора self или super?

Definition Classes
TreeInfo

def isSequenceValued(tree: JavaUniverse.Tree): Boolean

Является ли этот узел шаблона шаблоном со значением последовательности?

Definition Classes
TreeInfo

def isStableIdentifier(tree: JavaUniverse.Tree, allowVolatile: Boolean): Boolean

Является ли tree стабильным идентификатором, путём, который заканчивается идентификатором?

StableId ::= id | Path ‘.’ id | [id ’.’] ‘super’ [‘[’ id ‘]’] ‘.’ id

Definition Classes
TreeInfo

def isStableIdentifierPattern(tree: JavaUniverse.Tree): Boolean

Является ли tree допустимым шаблоном стабильного идентификатора (8.1.5 Шаблоны стабильных идентификаторов)?

Мы игнорируем изменчивость, так как она не имеет значения в шаблонах (scala/bug#6815)

Definition Classes
TreeInfo

def isStableMemberOf(sym: JavaUniverse.Symbol, tree: JavaUniverse.Tree, allowVolatile: Boolean): Boolean

Предполагая, что sym является членом tree, является ли он "стабильным членом"?

Стабильные члены — это пакеты или члены, введённые определениями объектов или определениями значений не изменчивых типов (§3.6).

Definition Classes
TreeInfo

def isStar(x: JavaUniverse.Tree): Boolean

Является ли это дерево Star(_) после удаления привязок?

Definition Classes
TreeInfo

def isSuperConstrCall(tree: JavaUniverse.Tree): Boolean

Является ли tree вызовом конструктора super?

Definition Classes
TreeInfo

def isSwitchAnnotation(tpe: JavaUniverse.Type): Boolean

Сопоставление Match(Typed(_, tpt), _) должно быть преобразовано в переключатель, если isSwitchAnnotation(tpt.tpe)

Definition Classes
TreeInfo

def isSynthCaseSymbol(sym: JavaUniverse.Symbol): Boolean

Definition Classes
TreeInfo

def isSyntheticCase(cdef: JavaUniverse.CaseDef): Boolean

Является ли данный CaseDef синтетически сгенерированным, например, MatchTranslation.translateTry?

Definition Classes
TreeInfo

def isSyntheticDefaultCase(cdef: JavaUniverse.CaseDef): Boolean

Является ли этот узел шаблона синтетической универсальной обработкой, добавленной во время синтеза PartialFunction, прежде чем мы узнаем, являются ли предоставленные пользователем случаи исчерпывающими.

Definition Classes
TreeInfo

def isTraitRef(tree: JavaUniverse.Tree): Boolean

Definition Classes
TreeInfo

def isVarPattern(pat: JavaUniverse.Tree): Boolean

Является ли дерево шаблоном переменной?

Definition Classes
TreeInfo

def isVarPatternDeep(tree: JavaUniverse.Tree): Boolean

Представляет ли это дерево несомненный шаблон сопоставления в позиции for { <tree> <- expr }, основываясь только на информации на стадии parser? Для соответствия не должно быть поддерева, которое будет интерпретировано как шаблон стабильного идентификатора, а также тестов типа, даже на TupleN. См. scala/bug#6968.

Например:

(foo @ (bar @ _)) = 0

не является шаблоном переменной; если только связывает имена.

Следующие не являются шаблонами переменных.

`bar`
Bar
(a, b)
_: T

Если шаблон представляет собой простой идентификатор, он всегда является шаблоном переменной. Например, следующие вводят новые привязки:

for { X <- xs } yield X
for { `backquoted` <- xs } yield `backquoted`

Обратите внимание, что это отличается от правила case:

object X
scrut match {
   case X =>  // case _ if scrut == X
}

Предыстория: https://groups.google.com/d/msg/scala-internals/qwa_XOw_7Ks/IktkeTBYqg0J

Definition Classes
TreeInfo

def isVariableOrGetter(tree: JavaUniverse.Tree): Boolean

Является ли дерево мутабельной переменной или геттером мутабельного поля?

Definition Classes
TreeInfo

def isWildcardArg(tree: JavaUniverse.Tree): Boolean

Является ли аргумент аргументом со звездочкой в формате _ или x @ _?

Definition Classes
TreeInfo

def isWildcardStarArg(tree: JavaUniverse.Tree): Boolean

Является ли этот узел аргумента в форме <expr> : _*?

Definition Classes
TreeInfo

def isWildcardStarArgList(trees: List[JavaUniverse.Tree]): Boolean

Заканчивается ли этот список аргументов аргументом в форме <expr> : _*?

Definition Classes
TreeInfo

def isWildcardStarType(tree: JavaUniverse.Tree): Boolean

Является ли аргумент аргументом звездочного типа в форме _*?

Definition Classes
TreeInfo

def mapMethodParamsAndArgs[R](params: List[JavaUniverse.Symbol], args: List[JavaUniverse.Tree])(f: (JavaUniverse.Symbol, JavaUniverse.Tree) => R): List[R]

Definition Classes
TreeInfo

final def mayBeTypePat(tree: JavaUniverse.Tree): Boolean

может ли этот тип быть шаблоном типа

Definition Classes
TreeInfo

def mayBeVarGetter(sym: JavaUniverse.Symbol): Boolean

Является ли символ потенциальным геттером переменной?

Definition Classes
TreeInfo

final def ne(arg0: AnyRef): Boolean

Definition Classes
AnyRef

def noFieldFor(vd: JavaUniverse.ValDef, owner: JavaUniverse.Symbol): Boolean

Definition Classes
TreeInfo

final def notify(): Unit

Definition Classes
AnyRef
Annotations
@native()

final def notifyAll(): Unit

Definition Classes
AnyRef
Annotations
@native()

def preSuperFields(stats: List[JavaUniverse.Tree]): List[JavaUniverse.ValDef]

Поля предка, помеченные как PRESUPER в этом фрагменте кода

Definition Classes
TreeInfo

final def stripCast(tree: JavaUniverse.Tree): JavaUniverse.Tree

Удаляет слои .asInstanceOf[T] / _.$asInstanceOf[T]() из выражения

Definition Classes
TreeInfo
Annotations
@tailrec()

def stripNamedApplyBlock(tree: JavaUniverse.Tree): JavaUniverse.Tree

Имена аргументов могут преобразовать вызов конструктора в блок, например, <init>(b = foo, a = bar) преобразуется в { val x$1 = foo val x$2 = bar <init>(x$2, x$1) }

Definition Classes
TreeInfo

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

Definition Classes
AnyRef

def toString(): String

Definition Classes
AnyRef → Any

def typeParameters(tree: JavaUniverse.Tree): List[JavaUniverse.TypeDef]

Если у этого дерева есть параметры типа, они. В противном случае Nil.

Definition Classes
TreeInfo

final def unbind(x: JavaUniverse.Tree): JavaUniverse.Tree

Базовый шаблон, игнорирующий любые привязки

Definition Classes
TreeInfo
Annotations
@tailrec()

final def wait(): Unit

Definition Classes
AnyRef
Annotations
@throws(classOf[java.lang.InterruptedException])

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

Definition Classes
AnyRef
Annotations
@throws(classOf[java.lang.InterruptedException])

final def wait(arg0: Long): Unit

Definition Classes
AnyRef
Annotations
@throws(classOf[java.lang.InterruptedException]) @native()

object Applied

Распаковывает применения в важные подчасти, описанные в классе Applied, а именно: ядро, targs и argss (в указанном порядке).

Деревья, которые не являются применениями, также принимаются. Их вызывающий объект и ядро будут равны входу, а targs и argss будут Nil.

Предоставленные экстракторы не раскрывают весь API класса Applied. Для расширенного использования вызовите dissectApplied явно и используйте его методы вместо сопоставления с образцом.

Definition Classes
TreeInfo

object DynamicApplication extends DynamicApplicationExtractor

Definition Classes
TreeInfo

object DynamicApplicationNamed extends DynamicApplicationExtractor

Definition Classes
TreeInfo

object DynamicUpdate extends DynamicApplicationExtractor

Definition Classes
TreeInfo

object IsFalse extends SeeThroughBlocks[Boolean]

Definition Classes
TreeInfo

object IsTrue extends SeeThroughBlocks[Boolean]

Definition Classes
TreeInfo

object MacroImplReference

Definition Classes
TreeInfo

object StripCast

Definition Classes
TreeInfo

object Unapplied

Находит синтетический узел Apply, соответствующий вызову экстрактора unapply (распаковывая вложенные Apply), и возвращает часть fun этого Apply.

Definition Classes
TreeInfo

object WildcardStarArg

Definition Classes
TreeInfo

© 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/runtime/JavaUniverse$treeInfo$.html

Spec-Zone.ru

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