Tree

abstract class Tree[-T >: Untyped](implicit @constructorOnly src: SourceFile) extends Positioned with SrcPos with Product with Container with Showable

Trees take a parameter indicating what the type of their tpe field is. Two choices: Type or Untyped. Untyped trees have type Tree[Untyped].

Tree typing uses a copy-on-write implementation:

  • You can never observe a tpe which is null (throws an exception)
  • So when creating a typed tree with withType we can re-use the existing tree transparently, assigning its tpe field, provided it was null before.
  • It is impossible to embed untyped trees in typed ones.
  • Typed trees can be embedded in untyped ones provided they are rooted in a TypedSplice node.
  • Type checking an untyped tree should remove all embedded TypedSplice nodes.
trait Showable
trait Container
trait Cloneable
trait Product
trait Equals
trait SrcPos
class Object
trait Matchable
class Any
trait TypTree[T]
class TypeTree[T]
trait TermTree[T]
class This[T]
class Super[T]
class Apply[T]
class TypeApply[T]
class Literal[T]
class New[T]
class Typed[T]
class Assign[T]
class If[T]
class InlineIf[T]
class Closure[T]
class Match[T]
class InlineMatch[T]
class Return[T]
class WhileDo[T]
class Try[T]
trait PatternTree[T]
class Bind[T]
class Alternative[T]
class UnApply[T]
class NameTree[T]
class RefTree[T]
class Ident[T]
class Select[T]
class MemberDef[T]
class ValOrDefDef[T]
class ValDef[T]
class EmptyValDef[T]
class DefDef[T]
class TypeDef[T]
class ModuleDef
class Labeled[T]
trait DefTree[T]
class Template[T]
class Import[T]
class Export[T]
class ProxyTree[T]
class PackageDef[T]
class Annotated[T]
class Parens
class NamedArg[T]
class Block[T]
class XMLBlock
class CaseDef[T]
class SeqLiteral[T]
class Inlined[T]
class Thicket[T]
class EmptyTree[T]
class OpTree
class InfixOp
class PostfixOp
class PrefixOp
class Function
class Tuple
class GenFrom
class GenAlias
class MacroTree
class Hole

Type members

Types

type ThisTree[T >: Untyped] <: Tree[T]

The type constructor at the root of the tree

The type constructor at the root of the tree

Value members

Concrete methods

def denot(using Context): Denotation

The denotation referred to by this tree. Defined for DenotingTrees and ProxyTrees, NoDenotation for other kinds of trees

The denotation referred to by this tree. Defined for DenotingTrees and ProxyTrees, NoDenotation for other kinds of trees

override def equals(that: Any): Boolean
Definition Classes
Equals -> Any

If this is a thicket, perform op on each of its trees otherwise, perform op ion tree itself.

If this is a thicket, perform op on each of its trees otherwise, perform op ion tree itself.

final def hasType: Boolean

Does the tree have its type field set? Note: this operation is not referentially transparent, because it can observe the withType modifications. Should be used only in special circumstances (we need it for printing trees with optional type info).

Does the tree have its type field set? Note: this operation is not referentially transparent, because it can observe the withType modifications. Should be used only in special circumstances (we need it for printing trees with optional type info).

override def hashCode(): Int
Definition Classes
Any

Does this tree define a new symbol that is not defined elsewhere?

Does this tree define a new symbol that is not defined elsewhere?

Is this tree either the empty tree or the empty ValDef or an empty type ident?

Is this tree either the empty tree or the empty ValDef or an empty type ident?

Is this a legal part of a pattern which is not at the same time a term?

Is this a legal part of a pattern which is not at the same time a term?

Does this tree represent a term?

Does this tree represent a term?

Does this tree represent a type?

Does this tree represent a type?

inline def orElse[U >: Untyped <: T](inline that: Tree[U]): Tree[U]

if this tree is the empty tree, the alternative, else this tree

if this tree is the empty tree, the alternative, else this tree

def sameTree(that: Tree[_]): Boolean
final def symbol(using Context): Symbol

Shorthand for denot.symbol.

Shorthand for denot.symbol.

def toList: List[Tree[T]]

Convert tree to a list. Gives a singleton list, except for thickets which return their element trees.

Convert tree to a list. Gives a singleton list, except for thickets which return their element trees.

override def toText(printer: Printer): Text
Definition Classes
final def tpe: T

The type of the tree. In case of an untyped tree, an UnAssignedTypeException is thrown. (Overridden by empty trees)

The type of the tree. In case of an untyped tree, an UnAssignedTypeException is thrown. (Overridden by empty trees)

The number of nodes in this tree

The number of nodes in this tree

final def typeOpt: Type
def withType(tpe: Type)(using Context): ThisTree[Type]

Return a typed tree that's isomorphic to this tree, but has given type. (Overridden by empty trees)

Return a typed tree that's isomorphic to this tree, but has given type. (Overridden by empty trees)

Inherited methods

final def allAttachments: List[(Key[_], Any)]

The list of all keys and values attached to this container.

The list of all keys and values attached to this container.

Inherited from
LinkSource
final def attachment[V](key: Key[V]): V

The attachment corresponding to key.

The attachment corresponding to key.

Throws
NoSuchElementException

if no attachment with key exists

Inherited from
LinkSource
final def attachmentOrElse[V](key: Key[V], default: V): V

The attachment corresponding to key, or default if no attachment with key exists.

The attachment corresponding to key, or default if no attachment with key exists.

Inherited from
LinkSource
def canEqual(that: Any): Boolean
Inherited from
Equals
def checkPos(nonOverlapping: Boolean)(using Context): Unit

Check that all positioned items in this tree satisfy the following conditions:

Check that all positioned items in this tree satisfy the following conditions:

  • Parent spans contain child spans
  • If item is a non-empty tree, it has a position
Inherited from
Positioned
def cloneIn(src: SourceFile): Tree[T]

Clone this node but assign it a fresh id which marks it as a node in file.

Clone this node but assign it a fresh id which marks it as a node in file.

Inherited from
Positioned
Inherited from
Positioned
def endPos(using ctx: Context): SourcePosition
Inherited from
SrcPos
def envelope(src: SourceFile, startSpan: Span): Span

The union of startSpan and the spans of all positioned children that have the same source as this node, except that Inlined nodes only consider their call child.

The union of startSpan and the spans of all positioned children that have the same source as this node, except that Inlined nodes only consider their call child.

Side effect: Any descendants without spans have but with the same source as this node have their span set to the end position of the envelope of all children to the left, or, if that one does not exist, to the start position of the envelope of all children to the right.

Inherited from
Positioned
def fallbackToText(printer: Printer): Text

A fallback text representation, if the pattern matching in Printers does not have a case for this showable element

A fallback text representation, if the pattern matching in Printers does not have a case for this showable element

Inherited from
Showable
def focus(using ctx: Context): SourcePosition
Inherited from
SrcPos
final def getAttachment[V](key: Key[V]): Option[V]

Optionally get attachment corresponding to key

Optionally get attachment corresponding to key

Inherited from
LinkSource
final def hasAttachment[V](key: Key[V]): Boolean

Does an attachment corresponding to key exist?

Does an attachment corresponding to key exist?

Inherited from
LinkSource
def line(using ctx: Context): Int
Inherited from
SrcPos
Inherited from
Product
def productElement(n: Int): Any
Inherited from
Product
Inherited from
Product
Inherited from
Product
Inherited from
Product
final def pushAttachment[V](key: Key[V], value: V)(using ctx: Context): Unit
Inherited from
Container
final def putAttachment[V](key: Key[V], value: V): Option[V]

Add attachment with given key and value.

Add attachment with given key and value.

Returns

Optionally, the old attachment with given key if one existed before. The new attachment is added at the position of the old one, or at the end if no attachment with same key existed.

Inherited from
LinkSource
Inherited from
Container
final def removeAttachment[V](key: Key[V]): Option[V]

Remove attachment with given key, if it exists.

Remove attachment with given key, if it exists.

Returns

Optionally, the removed attachment with given key if one existed before.

Inherited from
LinkSource
def show(using Context): String

The string representation of this showable element.

The string representation of this showable element.

Inherited from
Showable
def showIndented(margin: Int)(using Context): String

The string representation with each line after the first one indented by the given given margin (in spaces).

The string representation with each line after the first one indented by the given given margin (in spaces).

Inherited from
Showable
def showSummary(depth: Int)(using Context): String

The summarized string representation of this showable element. Recursion depth is limited to some smallish value. Default is Config.summarizeDepth.

The summarized string representation of this showable element. Recursion depth is limited to some smallish value. Default is Config.summarizeDepth.

Inherited from
Showable
Inherited from
Positioned
def span: Span

The span part of the item's position

The span part of the item's position

Inherited from
Positioned
def span_=(span: Span): Unit
Inherited from
Positioned
final def srcPos: SrcPos

This positioned item, widened to SrcPos. Used to make clear we only need the position, typically for error reporting.

This positioned item, widened to SrcPos. Used to make clear we only need the position, typically for error reporting.

Inherited from
Positioned
def startPos(using ctx: Context): SourcePosition
Inherited from
SrcPos

A unique identifier in case -Yshow-tree-ids, or -Ydebug-tree-with-id is set, -1 otherwise.

A unique identifier in case -Yshow-tree-ids, or -Ydebug-tree-with-id is set, -1 otherwise.

Inherited from
Positioned
def withAttachment[V](key: Key[V], value: V): Tree[T]
Inherited from
Container
final def withAttachmentsFrom(container: Container): Tree[T]

Copy the sticky attachments from container to this container.

Copy the sticky attachments from container to this container.

Inherited from
Container
def withSpan(span: Span): Tree[T]

A positioned item like this one with given span. If the positioned item is source-derived, a clone is returned. If the positioned item is synthetic, the position is updated destructively and the item itself is returned.

A positioned item like this one with given span. If the positioned item is source-derived, a clone is returned. If the positioned item is synthetic, the position is updated destructively and the item itself is returned.

Inherited from
Positioned

Concrete fields

protected var myTpe: T

Inherited fields

Inherited from
Positioned