Объект 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