Alternatives of patterns.
Alternatives of patterns.
Eliminated by compiler phases Eliminated by compiler phases patmat (in the new pattern matcher of 2.10) or explicitouter (in the old pre-2.10 pattern matcher), except for occurrences in encoded Switch stmt (i.e. remaining Match(CaseDef(...)))
A tree that has an annotation attached to it.
A tree that has an annotation attached to it. Only used for annotated types and annotation ascriptions, annotations on definitions are stored in the Modifiers. Eliminated by typechecker (typedAnnotated), the annotations are then stored in an AnnotatedType.
Applied type <tpt> [ <args> ], eliminated by RefCheck
Value application
Assignment
Either an assignment or a named argument.
Either an assignment or a named argument. Only appears in argument lists, eliminated by compiler phase typecheck (doTypedApply), resurrected by reifier.
Bind a variable to a rhs pattern.
Bind a variable to a rhs pattern.
Eliminated by compiler phases patmat (in the new pattern matcher of 2.10) or explicitouter (in the old pre-2.10 pattern matcher).
Block of expressions (semicolon separated expressions)
Case clause in a pattern match.
Case clause in a pattern match. (except for occurrences in switch statements). Eliminated by compiler phases patmat (in the new pattern matcher of 2.10) or explicitouter (in the old pre-2.10 pattern matcher)
A class definition.
Intersection type <parent1> with ...
Intersection type <parent1> with ... with <parentN> { <decls> }, eliminated by RefCheck
A method or macro definition.
A tree representing a symbol-defining entity:
1) A declaration or a definition (type, class, object, package, val, var, or def)
2) Bind
that is used to represent binding occurrences in pattern matches
3) LabelDef
that is used internally to represent while loops
Existential type tree node
Anonymous function, eliminated by compiler phase lambdalift
Common base class for Apply and TypeApply.
A reference to identifier name
.
Conditional expression
A common base class for class and object definitions.
Import clause
Import selector (not a tree, but a component of the Import
tree)
Import selector (not a tree, but a component of the Import
tree)
Representation of an imported name its optional rename and their optional positions
Eliminated by typecheck.
A labelled expression.
A labelled expression. Not expressible in language syntax, but generated by the compiler to simulate while/do-while loops, and also by the pattern matcher.
The label acts much like a nested function, where params
represents
the incoming parameters. The symbol given to the LabelDef should have
a MethodType, as if it were a nested function.
Jumps are apply nodes attributed with a label's symbol. The arguments from the apply node will be passed to the label and assigned to the Idents.
Forward jumps within a block are allowed.
Literal
- Pattern matching expression (before compiler phase explicitouter before 2.10 / patmat from 2.10)
- Pattern matching expression (before compiler phase explicitouter before 2.10 / patmat from 2.10)
After compiler phase explicitouter before 2.10 / patmat from 2.10, cases will satisfy the following constraints:
EmptyTree
,Literal(Constant(x:Int))
or Alternative(lit|...|lit)
Ident(nme.WILDCARD)
Common base class for all member definitions: types, classes, objects, packages, vals and vars, defs.
An object definition, e.g.
An object definition, e.g. object Foo
. Internally, objects are
quite frequently called modules to reduce ambiguity.
Eliminated by compiler phase refcheck.
A tree that carries a name, e.g.
A tree that carries a name, e.g. by defining it (DefTree
) or by referring to it (RefTree
).
Object instantiation
A packaging, such as package pid { stats }
A tree which references a symbol-carrying entity.
A tree which references a symbol-carrying entity. References one, as opposed to defining one; definitions are in DefTrees.
Return expression
A member selection <qualifier> .
A member selection <qualifier> . <name>
Type selection <qualifier> # <name>, eliminated by RefCheck
Singleton type, eliminated by RefCheck
Repetition of pattern.
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).
Super reference, where qual
is the corresponding this
reference.
Super reference, where qual
is the corresponding this
reference.
A super reference C.super[M]
is represented as Super(This(C), M)
.
A tree that carries a symbol, e.g.
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.
Instantiation template of a class or trait
A tree for a term.
A tree for a term. Not all trees representing terms are TermTrees; use isTerm to reliably identify terms.
Self reference
Throw expression
The type of Scala abstract syntax trees.
Try catch node
A tree for a type.
A tree for a type. Not all trees representing types are TypTrees; use isType to reliably identify types.
Explicit type application.
Type bounds tree node
An abstract type, a type parameter, or a type alias.
An abstract type, a type parameter, or a type alias. Eliminated by erasure.
A synthetic tree holding an arbitrary type.
A synthetic tree holding an arbitrary type. Not to be confused with
with TypTree, the trait for trees that are only used for type trees.
TypeTree's are inserted in several places, but most notably in
RefCheck
, where the arbitrary type trees are all replaced by
TypeTree's.
Type annotation, eliminated by compiler phase cleanup
Used to represent unapply
methods in pattern matching.
Used to represent unapply
methods in pattern matching.
For example:
2 match { case Foo(x) => x }
Is represented as:
Match( Literal(Constant(2)), List( CaseDef( UnApply( // a dummy node that carries the type of unapplication to patmat // thehere 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("" )))), // arguments of the unapply => nothing synthetic here List(Bind(TermName("x"), Ident(nme.WILDCARD)))), EmptyTree, Ident(TermName("x")))))
Introduced by typer. Eliminated by compiler phases patmat (in the new pattern matcher of 2.10) or explicitouter (in the old pre-2.10 pattern matcher).
Broadly speaking, a value definition.
Broadly speaking, a value definition. All these are encoded as ValDefs:
A common base class for ValDefs and DefDefs.
Alternatives of patterns.
Alternatives of patterns.
Eliminated by compiler phases Eliminated by compiler phases patmat (in the new pattern matcher of 2.10) or explicitouter (in the old pre-2.10 pattern matcher), except for occurrences in encoded Switch stmt (i.e. remaining Match(CaseDef(...)))
A tree that has an annotation attached to it.
A tree that has an annotation attached to it. Only used for annotated types and annotation ascriptions, annotations on definitions are stored in the Modifiers. Eliminated by typechecker (typedAnnotated), the annotations are then stored in an AnnotatedType.
Applied type <tpt> [ <args> ], eliminated by RefCheck
Value application
Assignment
Either an assignment or a named argument.
Either an assignment or a named argument. Only appears in argument lists, eliminated by compiler phase typecheck (doTypedApply), resurrected by reifier.
Bind a variable to a rhs pattern.
Bind a variable to a rhs pattern.
Eliminated by compiler phases patmat (in the new pattern matcher of 2.10) or explicitouter (in the old pre-2.10 pattern matcher).
Block of expressions (semicolon separated expressions)
Case clause in a pattern match.
Case clause in a pattern match. (except for occurrences in switch statements). Eliminated by compiler phases patmat (in the new pattern matcher of 2.10) or explicitouter (in the old pre-2.10 pattern matcher)
A class definition.
Intersection type <parent1> with ...
Intersection type <parent1> with ... with <parentN> { <decls> }, eliminated by RefCheck
A method or macro definition.
A tree representing a symbol-defining entity:
1) A declaration or a definition (type, class, object, package, val, var, or def)
2) Bind
that is used to represent binding occurrences in pattern matches
3) LabelDef
that is used internally to represent while loops
Existential type tree node
Anonymous function, eliminated by compiler phase lambdalift
Common base class for Apply and TypeApply.
A reference to identifier name
.
Conditional expression
A common base class for class and object definitions.
Import clause
Import selector (not a tree, but a component of the Import
tree)
Import selector (not a tree, but a component of the Import
tree)
Representation of an imported name its optional rename and their optional positions
Eliminated by typecheck.
A labelled expression.
A labelled expression. Not expressible in language syntax, but generated by the compiler to simulate while/do-while loops, and also by the pattern matcher.
The label acts much like a nested function, where params
represents
the incoming parameters. The symbol given to the LabelDef should have
a MethodType, as if it were a nested function.
Jumps are apply nodes attributed with a label's symbol. The arguments from the apply node will be passed to the label and assigned to the Idents.
Forward jumps within a block are allowed.
Literal
- Pattern matching expression (before compiler phase explicitouter before 2.10 / patmat from 2.10)
- Pattern matching expression (before compiler phase explicitouter before 2.10 / patmat from 2.10)
After compiler phase explicitouter before 2.10 / patmat from 2.10, cases will satisfy the following constraints:
EmptyTree
,Literal(Constant(x:Int))
or Alternative(lit|...|lit)
Ident(nme.WILDCARD)
Common base class for all member definitions: types, classes, objects, packages, vals and vars, defs.
An object definition, e.g.
An object definition, e.g. object Foo
. Internally, objects are
quite frequently called modules to reduce ambiguity.
Eliminated by compiler phase refcheck.
A tree that carries a name, e.g.
A tree that carries a name, e.g. by defining it (DefTree
) or by referring to it (RefTree
).
Object instantiation
A packaging, such as package pid { stats }
A tree which references a symbol-carrying entity.
A tree which references a symbol-carrying entity. References one, as opposed to defining one; definitions are in DefTrees.
Return expression
A member selection <qualifier> .
A member selection <qualifier> . <name>
Type selection <qualifier> # <name>, eliminated by RefCheck
Singleton type, eliminated by RefCheck
Repetition of pattern.
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).
Super reference, where qual
is the corresponding this
reference.
Super reference, where qual
is the corresponding this
reference.
A super reference C.super[M]
is represented as Super(This(C), M)
.
A tree that carries a symbol, e.g.
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.
Instantiation template of a class or trait
A tree for a term.
A tree for a term. Not all trees representing terms are TermTrees; use isTerm to reliably identify terms.
Self reference
Throw expression
The type of Scala abstract syntax trees.
Try catch node
A tree for a type.
A tree for a type. Not all trees representing types are TypTrees; use isType to reliably identify types.
Explicit type application.
Type bounds tree node
An abstract type, a type parameter, or a type alias.
An abstract type, a type parameter, or a type alias. Eliminated by erasure.
A synthetic tree holding an arbitrary type.
A synthetic tree holding an arbitrary type. Not to be confused with
with TypTree, the trait for trees that are only used for type trees.
TypeTree's are inserted in several places, but most notably in
RefCheck
, where the arbitrary type trees are all replaced by
TypeTree's.
Type annotation, eliminated by compiler phase cleanup
Used to represent unapply
methods in pattern matching.
Used to represent unapply
methods in pattern matching.
For example:
2 match { case Foo(x) => x }
Is represented as:
Match( Literal(Constant(2)), List( CaseDef( UnApply( // a dummy node that carries the type of unapplication to patmat // thehere 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("" )))), // arguments of the unapply => nothing synthetic here List(Bind(TermName("x"), Ident(nme.WILDCARD)))), EmptyTree, Ident(TermName("x")))))
Introduced by typer. Eliminated by compiler phases patmat (in the new pattern matcher of 2.10) or explicitouter (in the old pre-2.10 pattern matcher).
Broadly speaking, a value definition.
Broadly speaking, a value definition. All these are encoded as ValDefs:
A common base class for ValDefs and DefDefs.
The empty tree
An empty deferred value definition corresponding to:
val _: _
This is used as a placeholder in the self
parameter Template if there is
no definition of a self value of self type.
An empty superclass constructor call corresponding to: super.<init>() This is used as a placeholder in the primary constructor body in class templates to denote the insertion point of a call to superclass constructor after the typechecker figures out the superclass of a given template.
The empty tree
An empty deferred value definition corresponding to:
val _: _
This is used as a placeholder in the self
parameter Template if there is
no definition of a self value of self type.
An empty superclass constructor call corresponding to: super.<init>() This is used as a placeholder in the primary constructor body in class templates to denote the insertion point of a call to superclass constructor after the typechecker figures out the superclass of a given template.
The type of standard (lazy) tree copiers.
The type of standard (lazy) tree copiers.
Creates a lazy tree copier.
Creates a strict tree copier.
The standard (lazy) tree copier.
Creates a lazy tree copier.
Creates a strict tree copier.
The standard (lazy) tree copier.
A factory method for Ident
nodes.
A factory method for Select
nodes.
A factory method for This
nodes.
A factory method for TypeTree
nodes.
A factory method for Apply
nodes.
A factory method for Apply
nodes.
(Since version 2.10.1) Use q"$sym(..$args)" instead
0-1 argument list new, based on a type tree.
0-1 argument list new, based on a type tree.
(Since version 2.10.1) Use q"new $tpt(..$args)" instead
A factory method for Bind
nodes.
A factory method for Bind
nodes.
(Since version 2.10.1) Use the canonical Bind constructor to create a bind and then initialize its symbol manually
A factory method for Block
nodes.
A factory method for Block
nodes.
Flattens directly nested blocks.
(Since version 2.10.1) Use q"{..$stats}" instead. Flatten directly nested blocks manually if needed
A factory method for CaseDef
nodes.
A factory method for CaseDef
nodes.
(Since version 2.10.1) Use cq"$pat => $body" instead
A factory method for Ident
nodes.
A factory method for Ident
nodes.
(Since version 2.10.1) Use Ident(TermName(name)) instead
0-1 argument list new, based on a symbol.
0-1 argument list new, based on a symbol.
(Since version 2.10.1) Use q"new ${sym.toType}(..$args)" instead
0-1 argument list new, based on a type.
0-1 argument list new, based on a type.
(Since version 2.10.1) Use q"new $tpe(..$args)" instead
Factory method for object creation new tpt(args_1)...(args_n)
A New(t, as)
is expanded to: (new t).<init>(as)
Factory method for object creation new tpt(args_1)...(args_n)
A New(t, as)
is expanded to: (new t).<init>(as)
(Since version 2.10.1) Use q"new $tpt(...$argss)" instead
A factory method for Select
nodes.
A factory method for Select
nodes.
The string name
argument is assumed to represent a TermName
.
(Since version 2.10.1) Use Select(tree, TermName(name)) instead
A factory method for Super
nodes.
A factory method for Super
nodes.
(Since version 2.10.1) Use q"$sym.super[$mix].x".qualifier instead
A factory method for Throw
nodes.
A factory method for Throw
nodes.
(Since version 2.10.1) Use q"throw new $tpe(..$args)" instead
A factory method for Try
nodes.
A factory method for Try
nodes.
(Since version 2.10.1) Convert cases into casedefs and use q"try $body catch { case ..$newcases }" instead
A factory method for Ident
nodes.
A factory method for Select
nodes.
A factory method for This
nodes.
A factory method for TypeTree
nodes.
A factory method for Apply
nodes.
A factory method for Apply
nodes.
(Since version 2.10.1) Use q"$sym(..$args)" instead
0-1 argument list new, based on a type tree.
0-1 argument list new, based on a type tree.
(Since version 2.10.1) Use q"new $tpt(..$args)" instead
A factory method for Bind
nodes.
A factory method for Bind
nodes.
(Since version 2.10.1) Use the canonical Bind constructor to create a bind and then initialize its symbol manually
A factory method for Block
nodes.
A factory method for Block
nodes.
Flattens directly nested blocks.
(Since version 2.10.1) Use q"{..$stats}" instead. Flatten directly nested blocks manually if needed
A factory method for CaseDef
nodes.
A factory method for CaseDef
nodes.
(Since version 2.10.1) Use cq"$pat => $body" instead
A factory method for Ident
nodes.
A factory method for Ident
nodes.
(Since version 2.10.1) Use Ident(TermName(name)) instead
0-1 argument list new, based on a symbol.
0-1 argument list new, based on a symbol.
(Since version 2.10.1) Use q"new ${sym.toType}(..$args)" instead
0-1 argument list new, based on a type.
0-1 argument list new, based on a type.
(Since version 2.10.1) Use q"new $tpe(..$args)" instead
Factory method for object creation new tpt(args_1)...(args_n)
A New(t, as)
is expanded to: (new t).<init>(as)
Factory method for object creation new tpt(args_1)...(args_n)
A New(t, as)
is expanded to: (new t).<init>(as)
(Since version 2.10.1) Use q"new $tpt(...$argss)" instead
A factory method for Select
nodes.
A factory method for Select
nodes.
The string name
argument is assumed to represent a TermName
.
(Since version 2.10.1) Use Select(tree, TermName(name)) instead
A factory method for Super
nodes.
A factory method for Super
nodes.
(Since version 2.10.1) Use q"$sym.super[$mix].x".qualifier instead
A factory method for Throw
nodes.
A factory method for Throw
nodes.
(Since version 2.10.1) Use q"throw new $tpe(..$args)" instead
A factory method for Try
nodes.
A factory method for Try
nodes.
(Since version 2.10.1) Convert cases into casedefs and use q"try $body catch { case ..$newcases }" instead
The type of tree modifiers (not a tree, but rather part of DefTrees).
An extractor class to create and pattern match with syntax Modifiers(flags, privateWithin, annotations)
.
An extractor class to create and pattern match with syntax Modifiers(flags, privateWithin, annotations)
.
Modifiers encapsulate flags, visibility annotations and Scala annotations for member definitions.
A class that implement a default tree transformation strategy: breadth-first component-wise cloning.
A class that implement a default tree traversal strategy: breadth-first component-wise.
The type of tree modifiers (not a tree, but rather part of DefTrees).
An extractor class to create and pattern match with syntax Modifiers(flags, privateWithin, annotations)
.
An extractor class to create and pattern match with syntax Modifiers(flags, privateWithin, annotations)
.
Modifiers encapsulate flags, visibility annotations and Scala annotations for member definitions.
A class that implement a default tree transformation strategy: breadth-first component-wise cloning.
A class that implement a default tree traversal strategy: breadth-first component-wise.
The constructor/extractor for Modifiers
instances.
The factory for Modifiers
instances.
The factory for Modifiers
instances.
An empty Modifiers
object: no flags, empty visibility annotation and no Scala annotations.
The constructor/extractor for Modifiers
instances.
The factory for Modifiers
instances.
The factory for Modifiers
instances.
An empty Modifiers
object: no flags, empty visibility annotation and no Scala annotations.
The methods available for each reflection entity, without the implementation. Since the reflection entities are later overridden by runtime reflection and macros, their API counterparts guarantee a minimum set of methods that are implemented.
The API that all alternatives support
The API that all annotateds support
The API that all applied type trees support
The API that all applies support
The API that all assigns support
The API that all assigns support
The API that all binds support
The API that all blocks support
The API that all case defs support
The API that all class defs support
The API that all compound type trees support
The API that all def defs support
The API that all def trees support
The API that all existential type trees support
The API that all functions support
The API that all applies support
The API that all idents support
The API that all ifs support
The API that all impl defs support
The API that all imports support
The API that all import selectors support
The API that all label defs support
The API that all literals support
The API that all matches support
The API that all member defs support
The API that all Modifiers support
The API that all module defs support
The API that all name trees support
The API that all news support
The API that all package defs support
The API that all ref trees support
The API that all returns support
The API that all selects support
The API that all selects from type trees support
The API that all singleton type trees support
The API that all stars support
The API that all supers support
The API that all sym trees support
The API that all templates support
The API that all term trees support
The API that all thises support
The API that all tries support
The API that all trees support.
The API that all trees support. The main source of information about trees is the scala.reflect.api.Trees page.
The API of a tree copier.
The API that all tries support
The API that all typ trees support
The API that all type applies support
The API that all type bound trees support
The API that all type defs support
The API that all type trees support
The API that all typeds support
The API that all unapplies support
The API that all val defs support
The API that all val defs and def defs support
The API that all alternatives support
The API that all annotateds support
The API that all applied type trees support
The API that all applies support
The API that all assigns support
The API that all assigns support
The API that all binds support
The API that all blocks support
The API that all case defs support
The API that all class defs support
The API that all compound type trees support
The API that all def defs support
The API that all def trees support
The API that all existential type trees support
The API that all functions support
The API that all applies support
The API that all idents support
The API that all ifs support
The API that all impl defs support
The API that all imports support
The API that all import selectors support
The API that all label defs support
The API that all literals support
The API that all matches support
The API that all member defs support
The API that all Modifiers support
The API that all module defs support
The API that all name trees support
The API that all news support
The API that all package defs support
The API that all ref trees support
The API that all returns support
The API that all selects support
The API that all selects from type trees support
The API that all singleton type trees support
The API that all stars support
The API that all supers support
The API that all sym trees support
The API that all templates support
The API that all term trees support
The API that all thises support
The API that all tries support
The API that all trees support.
The API that all trees support. The main source of information about trees is the scala.reflect.api.Trees page.
The API of a tree copier.
The API that all tries support
The API that all typ trees support
The API that all type applies support
The API that all type bound trees support
The API that all type defs support
The API that all type trees support
The API that all typeds support
The API that all unapplies support
The API that all val defs support
The API that all val defs and def defs support
Extractors provide the machinery necessary to allow pattern matching and construction of reflection entities that is similar to case classes, although the entities are only abstract types that are later overridden.
An extractor class to create and pattern match with syntax Alternative(trees)
.
An extractor class to create and pattern match with syntax Alternative(trees)
.
This AST node corresponds to the following Scala code:
pat1 | ... | patn
An extractor class to create and pattern match with syntax Annotated(annot, arg)
.
An extractor class to create and pattern match with syntax Annotated(annot, arg)
.
This AST node corresponds to the following Scala code:
arg @annot // for types arg: @annot // for exprs
An extractor class to create and pattern match with syntax AppliedTypeTree(tpt, args)
.
An extractor class to create and pattern match with syntax AppliedTypeTree(tpt, args)
.
This AST node corresponds to the following Scala code:
tpt[args]
Should only be used with tpt
nodes which are types, i.e. which have isType
returning true
.
Otherwise TypeApply
should be used instead.
List[Int] as in val x: List[Int] = ???
// represented as AppliedTypeTree(Ident(<List>), List(TypeTree(<Int>)))
def foo[T] = ??? foo[Int] // represented as TypeApply(Ident(<foo>), List(TypeTree(<Int>)))
An extractor class to create and pattern match with syntax Apply(fun, args)
.
An extractor class to create and pattern match with syntax Apply(fun, args)
.
This AST node corresponds to the following Scala code:
fun(args)
For instance:
fun[targs](args)
Is expressed as:
Apply(TypeApply(fun, targs), args)
An extractor class to create and pattern match with syntax Assign(lhs, rhs)
.
An extractor class to create and pattern match with syntax Assign(lhs, rhs)
.
This AST node corresponds to the following Scala code:
lhs = rhs
An extractor class to create and pattern match with syntax AssignOrNamedArg(lhs, rhs)
.
An extractor class to create and pattern match with syntax AssignOrNamedArg(lhs, rhs)
.
This AST node corresponds to the following Scala code:
m.f(lhs = rhs)
@annotation(lhs = rhs)
An extractor class to create and pattern match with syntax Bind(name, body)
.
An extractor class to create and pattern match with syntax Bind(name, body)
.
This AST node corresponds to the following Scala code:
pat*
An extractor class to create and pattern match with syntax Block(stats, expr)
.
An extractor class to create and pattern match with syntax Block(stats, expr)
.
This AST node corresponds to the following Scala code:
{ stats; expr }
If the block is empty, the expr
is set to Literal(Constant(()))
.
An extractor class to create and pattern match with syntax CaseDef(pat, guard, body)
.
An extractor class to create and pattern match with syntax CaseDef(pat, guard, body)
.
This AST node corresponds to the following Scala code:
case
pat if
guard => body
If the guard is not present, the guard
is set to EmptyTree
.
If the body is not specified, the body
is set to Literal(Constant(()))
An extractor class to create and pattern match with syntax ClassDef(mods, name, tparams, impl)
.
An extractor class to create and pattern match with syntax ClassDef(mods, name, tparams, impl)
.
This AST node corresponds to the following Scala code:
mods class
name [tparams] impl
Where impl stands for:
extends
parents { defs }
An extractor class to create and pattern match with syntax CompoundTypeTree(templ)
.
An extractor class to create and pattern match with syntax CompoundTypeTree(templ)
.
This AST node corresponds to the following Scala code:
parent1 with ... with parentN { refinement }
An extractor class to create and pattern match with syntax DefDef(mods, name, tparams, vparamss, tpt, rhs)
.
An extractor class to create and pattern match with syntax DefDef(mods, name, tparams, vparamss, tpt, rhs)
.
This AST node corresponds to the following Scala code:
mods def
name[tparams](vparams_1)...(vparams_n): tpt = rhs
If the return type is not specified explicitly (i.e. is meant to be inferred),
this is expressed by having tpt
set to TypeTree()
(but not to an EmptyTree
!).
An extractor class to create and pattern match with syntax ExistentialTypeTree(tpt, whereClauses)
.
An extractor class to create and pattern match with syntax ExistentialTypeTree(tpt, whereClauses)
.
This AST node corresponds to the following Scala code:
tpt forSome { whereClauses }
An extractor class to create and pattern match with syntax Function(vparams, body)
.
An extractor class to create and pattern match with syntax Function(vparams, body)
.
This AST node corresponds to the following Scala code:
vparams => body
The symbol of a Function is a synthetic TermSymbol. It is the owner of the function's parameters.
An extractor class to create and pattern match with syntax Ident(qual, name)
.
An extractor class to create and pattern match with syntax Ident(qual, name)
.
This AST node corresponds to the following Scala code:
name
Type checker converts idents that refer to enclosing fields or methods to selects. For example, name ==> this.name
An extractor class to create and pattern match with syntax If(cond, thenp, elsep)
.
An extractor class to create and pattern match with syntax If(cond, thenp, elsep)
.
This AST node corresponds to the following Scala code:
if
(cond) thenp else
elsep
If the alternative is not present, the elsep
is set to Literal(Constant(()))
.
An extractor class to create and pattern match with syntax Import(expr, selectors)
.
An extractor class to create and pattern match with syntax Import(expr, selectors)
.
This AST node corresponds to the following Scala code:
import expr.{selectors}
Selectors are a list of ImportSelectors, which conceptually are pairs of names (from, to). The last (and maybe only name) may be a nme.WILDCARD. For instance:
import qual.{x, y => z, _}
Would be represented as:
Import(qual, List(("x", "x"), ("y", "z"), (WILDCARD, null)))
The symbol of an Import
is an import symbol @see Symbol.newImport.
It's used primarily as a marker to check that the import has been typechecked.
An extractor class to create and pattern match with syntax ImportSelector(name:, namePos, rename, renamePos)
.
An extractor class to create and pattern match with syntax ImportSelector(name:, namePos, rename, renamePos)
.
This is not an AST node, it is used as a part of the Import
node.
An extractor class to create and pattern match with syntax LabelDef(name, params, rhs)
.
An extractor class to create and pattern match with syntax LabelDef(name, params, rhs)
.
This AST node does not have direct correspondence to Scala code. It is used for tailcalls and like. For example, while/do are desugared to label defs as follows:
while (cond) body ==> LabelDef($L, List(), if (cond) { body; L$() } else ())
do body while (cond) ==> LabelDef($L, List(), body; if (cond) L$() else ())
An extractor class to create and pattern match with syntax Literal(value)
.
An extractor class to create and pattern match with syntax Literal(value)
.
This AST node corresponds to the following Scala code:
value
An extractor class to create and pattern match with syntax Match(selector, cases)
.
An extractor class to create and pattern match with syntax Match(selector, cases)
.
This AST node corresponds to the following Scala code:
selector match
{ cases }
Match
is also used in pattern matching assignments like val (foo, bar) = baz
.
An extractor class to create and pattern match with syntax ModuleDef(mods, name, impl)
.
An extractor class to create and pattern match with syntax ModuleDef(mods, name, impl)
.
This AST node corresponds to the following Scala code:
mods object
name impl
Where impl stands for:
extends
parents { defs }
An extractor class to create and pattern match with syntax New(tpt)
.
An extractor class to create and pattern match with syntax New(tpt)
.
This AST node corresponds to the following Scala code:
new
T
This node always occurs in the following context:
(new
tpt).<init>[targs](args)
For example, an AST representation of:
new Example[Int](2)(3)
is the following code:
Apply( Apply( TypeApply( Select(New(TypeTree(typeOf[Example])), nme.CONSTRUCTOR) TypeTree(typeOf[Int])), List(Literal(Constant(2)))), List(Literal(Constant(3))))
An extractor class to create and pattern match with syntax PackageDef(pid, stats)
.
An extractor class to create and pattern match with syntax PackageDef(pid, stats)
.
This AST node corresponds to the following Scala code:
package
pid { stats }
An extractor class to create and pattern match with syntax RefTree(qual, name)
.
An extractor class to create and pattern match with syntax RefTree(qual, name)
.
This AST node corresponds to either Ident, Select or SelectFromTypeTree.
An extractor class to create and pattern match with syntax Return(expr)
.
An extractor class to create and pattern match with syntax Return(expr)
.
This AST node corresponds to the following Scala code:
return
expr
The symbol of a Return node is the enclosing method.
An extractor class to create and pattern match with syntax Select(qual, name)
.
An extractor class to create and pattern match with syntax Select(qual, name)
.
This AST node corresponds to the following Scala code:
qualifier.selector
Should only be used with qualifier
nodes which are terms, i.e. which have isTerm
returning true
.
Otherwise SelectFromTypeTree
should be used instead.
foo.Bar // represented as Select(Ident(<foo>), <Bar>) Foo#Bar // represented as SelectFromTypeTree(Ident(<Foo>), <Bar>)
An extractor class to create and pattern match with syntax SelectFromTypeTree(qualifier, name)
.
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>)
An extractor class to create and pattern match with syntax SingletonTypeTree(ref)
.
An extractor class to create and pattern match with syntax SingletonTypeTree(ref)
.
This AST node corresponds to the following Scala code:
ref.type
An extractor class to create and pattern match with syntax Star(elem)
.
An extractor class to create and pattern match with syntax Star(elem)
.
This AST node corresponds to the following Scala code:
pat*
An extractor class to create and pattern match with syntax Super(qual, mix)
.
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.
An extractor class to create and pattern match with syntax Template(parents, self, body)
.
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 } }
An extractor class to create and pattern match with syntax This(qual)
.
An extractor class to create and pattern match with syntax This(qual)
.
This AST node corresponds to the following Scala code:
qual.this
The symbol of a This is the class to which the this refers. For instance in C.this, it would be C.
An extractor class to create and pattern match with syntax Throw(expr)
.
An extractor class to create and pattern match with syntax Throw(expr)
.
This AST node corresponds to the following Scala code:
throw
expr
An extractor class to create and pattern match with syntax Try(block, catches, finalizer)
.
An extractor class to create and pattern match with syntax Try(block, catches, finalizer)
.
This AST node corresponds to the following Scala code:
try
block catch
{ catches } finally
finalizer
If the finalizer is not present, the finalizer
is set to EmptyTree
.
An extractor class to create and pattern match with syntax TypeApply(fun, args)
.
An extractor class to create and pattern match with syntax TypeApply(fun, args)
.
This AST node corresponds to the following Scala code:
fun[args]
Should only be used with fun
nodes which are terms, i.e. which have isTerm
returning true
.
Otherwise AppliedTypeTree
should be used instead.
def foo[T] = ??? foo[Int] // represented as TypeApply(Ident(<foo>), List(TypeTree(<Int>)))
List[Int] as in val x: List[Int] = ???
// represented as AppliedTypeTree(Ident(<List>), List(TypeTree(<Int>)))
An extractor class to create and pattern match with syntax TypeBoundsTree(lo, hi)
.
An extractor class to create and pattern match with syntax TypeBoundsTree(lo, hi)
.
This AST node corresponds to the following Scala code:
>: lo <: hi
An extractor class to create and pattern match with syntax TypeDef(mods, name, tparams, rhs)
.
An extractor class to create and pattern match with syntax TypeDef(mods, name, tparams, rhs)
.
This AST node corresponds to the following Scala code:
mods type
name[tparams] = rhs
mods type
name[tparams] >: lo <: hi
First usage illustrates TypeDefs
representing type aliases and type parameters.
Second usage illustrates TypeDefs
representing abstract types,
where lo and hi are both TypeBoundsTrees
and Modifier.deferred
is set in mods.
An extractor class to create and pattern match with syntax TypeTree()
.
An extractor class to create and pattern match with syntax TypeTree()
.
This AST node does not have direct correspondence to Scala code,
and is emitted by everywhere when we want to wrap a Type
in a Tree
.
An extractor class to create and pattern match with syntax Typed(expr, tpt)
.
An extractor class to create and pattern match with syntax Typed(expr, tpt)
.
This AST node corresponds to the following Scala code:
expr: tpt
An extractor class to create and pattern match with syntax UnApply(fun, args)
.
An extractor class to create and pattern match with syntax UnApply(fun, args)
.
This AST node does not have direct correspondence to Scala code,
and is introduced when typechecking pattern matches and try
blocks.
An extractor class to create and pattern match with syntax ValDef(mods, name, tpt, rhs)
.
An extractor class to create and pattern match with syntax ValDef(mods, name, tpt, rhs)
.
This AST node corresponds to any of the following Scala code:
mods val
name: tpt = rhs
mods var
name: tpt = rhs
mods name: tpt = rhs // in signatures of function and method definitions
self: Bar => // self-types
If the type of a value is not specified explicitly (i.e. is meant to be inferred),
this is expressed by having tpt
set to TypeTree()
(but not to an EmptyTree
!).
An extractor class to create and pattern match with syntax Alternative(trees)
.
An extractor class to create and pattern match with syntax Alternative(trees)
.
This AST node corresponds to the following Scala code:
pat1 | ... | patn
An extractor class to create and pattern match with syntax Annotated(annot, arg)
.
An extractor class to create and pattern match with syntax Annotated(annot, arg)
.
This AST node corresponds to the following Scala code:
arg @annot // for types arg: @annot // for exprs
An extractor class to create and pattern match with syntax AppliedTypeTree(tpt, args)
.
An extractor class to create and pattern match with syntax AppliedTypeTree(tpt, args)
.
This AST node corresponds to the following Scala code:
tpt[args]
Should only be used with tpt
nodes which are types, i.e. which have isType
returning true
.
Otherwise TypeApply
should be used instead.
List[Int] as in val x: List[Int] = ???
// represented as AppliedTypeTree(Ident(<List>), List(TypeTree(<Int>)))
def foo[T] = ??? foo[Int] // represented as TypeApply(Ident(<foo>), List(TypeTree(<Int>)))
An extractor class to create and pattern match with syntax Apply(fun, args)
.
An extractor class to create and pattern match with syntax Apply(fun, args)
.
This AST node corresponds to the following Scala code:
fun(args)
For instance:
fun[targs](args)
Is expressed as:
Apply(TypeApply(fun, targs), args)
An extractor class to create and pattern match with syntax Assign(lhs, rhs)
.
An extractor class to create and pattern match with syntax Assign(lhs, rhs)
.
This AST node corresponds to the following Scala code:
lhs = rhs
An extractor class to create and pattern match with syntax AssignOrNamedArg(lhs, rhs)
.
An extractor class to create and pattern match with syntax AssignOrNamedArg(lhs, rhs)
.
This AST node corresponds to the following Scala code:
m.f(lhs = rhs)
@annotation(lhs = rhs)
An extractor class to create and pattern match with syntax Bind(name, body)
.
An extractor class to create and pattern match with syntax Bind(name, body)
.
This AST node corresponds to the following Scala code:
pat*
An extractor class to create and pattern match with syntax Block(stats, expr)
.
An extractor class to create and pattern match with syntax Block(stats, expr)
.
This AST node corresponds to the following Scala code:
{ stats; expr }
If the block is empty, the expr
is set to Literal(Constant(()))
.
An extractor class to create and pattern match with syntax CaseDef(pat, guard, body)
.
An extractor class to create and pattern match with syntax CaseDef(pat, guard, body)
.
This AST node corresponds to the following Scala code:
case
pat if
guard => body
If the guard is not present, the guard
is set to EmptyTree
.
If the body is not specified, the body
is set to Literal(Constant(()))
An extractor class to create and pattern match with syntax ClassDef(mods, name, tparams, impl)
.
An extractor class to create and pattern match with syntax ClassDef(mods, name, tparams, impl)
.
This AST node corresponds to the following Scala code:
mods class
name [tparams] impl
Where impl stands for:
extends
parents { defs }
An extractor class to create and pattern match with syntax CompoundTypeTree(templ)
.
An extractor class to create and pattern match with syntax CompoundTypeTree(templ)
.
This AST node corresponds to the following Scala code:
parent1 with ... with parentN { refinement }
An extractor class to create and pattern match with syntax DefDef(mods, name, tparams, vparamss, tpt, rhs)
.
An extractor class to create and pattern match with syntax DefDef(mods, name, tparams, vparamss, tpt, rhs)
.
This AST node corresponds to the following Scala code:
mods def
name[tparams](vparams_1)...(vparams_n): tpt = rhs
If the return type is not specified explicitly (i.e. is meant to be inferred),
this is expressed by having tpt
set to TypeTree()
(but not to an EmptyTree
!).
An extractor class to create and pattern match with syntax ExistentialTypeTree(tpt, whereClauses)
.
An extractor class to create and pattern match with syntax ExistentialTypeTree(tpt, whereClauses)
.
This AST node corresponds to the following Scala code:
tpt forSome { whereClauses }
An extractor class to create and pattern match with syntax Function(vparams, body)
.
An extractor class to create and pattern match with syntax Function(vparams, body)
.
This AST node corresponds to the following Scala code:
vparams => body
The symbol of a Function is a synthetic TermSymbol. It is the owner of the function's parameters.
An extractor class to create and pattern match with syntax Ident(qual, name)
.
An extractor class to create and pattern match with syntax Ident(qual, name)
.
This AST node corresponds to the following Scala code:
name
Type checker converts idents that refer to enclosing fields or methods to selects. For example, name ==> this.name
An extractor class to create and pattern match with syntax If(cond, thenp, elsep)
.
An extractor class to create and pattern match with syntax If(cond, thenp, elsep)
.
This AST node corresponds to the following Scala code:
if
(cond) thenp else
elsep
If the alternative is not present, the elsep
is set to Literal(Constant(()))
.
An extractor class to create and pattern match with syntax Import(expr, selectors)
.
An extractor class to create and pattern match with syntax Import(expr, selectors)
.
This AST node corresponds to the following Scala code:
import expr.{selectors}
Selectors are a list of ImportSelectors, which conceptually are pairs of names (from, to). The last (and maybe only name) may be a nme.WILDCARD. For instance:
import qual.{x, y => z, _}
Would be represented as:
Import(qual, List(("x", "x"), ("y", "z"), (WILDCARD, null)))
The symbol of an Import
is an import symbol @see Symbol.newImport.
It's used primarily as a marker to check that the import has been typechecked.
An extractor class to create and pattern match with syntax ImportSelector(name:, namePos, rename, renamePos)
.
An extractor class to create and pattern match with syntax ImportSelector(name:, namePos, rename, renamePos)
.
This is not an AST node, it is used as a part of the Import
node.
An extractor class to create and pattern match with syntax LabelDef(name, params, rhs)
.
An extractor class to create and pattern match with syntax LabelDef(name, params, rhs)
.
This AST node does not have direct correspondence to Scala code. It is used for tailcalls and like. For example, while/do are desugared to label defs as follows:
while (cond) body ==> LabelDef($L, List(), if (cond) { body; L$() } else ())
do body while (cond) ==> LabelDef($L, List(), body; if (cond) L$() else ())
An extractor class to create and pattern match with syntax Literal(value)
.
An extractor class to create and pattern match with syntax Literal(value)
.
This AST node corresponds to the following Scala code:
value
An extractor class to create and pattern match with syntax Match(selector, cases)
.
An extractor class to create and pattern match with syntax Match(selector, cases)
.
This AST node corresponds to the following Scala code:
selector match
{ cases }
Match
is also used in pattern matching assignments like val (foo, bar) = baz
.
An extractor class to create and pattern match with syntax ModuleDef(mods, name, impl)
.
An extractor class to create and pattern match with syntax ModuleDef(mods, name, impl)
.
This AST node corresponds to the following Scala code:
mods object
name impl
Where impl stands for:
extends
parents { defs }
An extractor class to create and pattern match with syntax New(tpt)
.
An extractor class to create and pattern match with syntax New(tpt)
.
This AST node corresponds to the following Scala code:
new
T
This node always occurs in the following context:
(new
tpt).<init>[targs](args)
For example, an AST representation of:
new Example[Int](2)(3)
is the following code:
Apply( Apply( TypeApply( Select(New(TypeTree(typeOf[Example])), nme.CONSTRUCTOR) TypeTree(typeOf[Int])), List(Literal(Constant(2)))), List(Literal(Constant(3))))
An extractor class to create and pattern match with syntax PackageDef(pid, stats)
.
An extractor class to create and pattern match with syntax PackageDef(pid, stats)
.
This AST node corresponds to the following Scala code:
package
pid { stats }
An extractor class to create and pattern match with syntax RefTree(qual, name)
.
An extractor class to create and pattern match with syntax RefTree(qual, name)
.
This AST node corresponds to either Ident, Select or SelectFromTypeTree.
An extractor class to create and pattern match with syntax Return(expr)
.
An extractor class to create and pattern match with syntax Return(expr)
.
This AST node corresponds to the following Scala code:
return
expr
The symbol of a Return node is the enclosing method.
An extractor class to create and pattern match with syntax Select(qual, name)
.
An extractor class to create and pattern match with syntax Select(qual, name)
.
This AST node corresponds to the following Scala code:
qualifier.selector
Should only be used with qualifier
nodes which are terms, i.e. which have isTerm
returning true
.
Otherwise SelectFromTypeTree
should be used instead.
foo.Bar // represented as Select(Ident(<foo>), <Bar>) Foo#Bar // represented as SelectFromTypeTree(Ident(<Foo>), <Bar>)
An extractor class to create and pattern match with syntax SelectFromTypeTree(qualifier, name)
.
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>)
An extractor class to create and pattern match with syntax SingletonTypeTree(ref)
.
An extractor class to create and pattern match with syntax SingletonTypeTree(ref)
.
This AST node corresponds to the following Scala code:
ref.type
An extractor class to create and pattern match with syntax Star(elem)
.
An extractor class to create and pattern match with syntax Star(elem)
.
This AST node corresponds to the following Scala code:
pat*
An extractor class to create and pattern match with syntax Super(qual, mix)
.
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.
An extractor class to create and pattern match with syntax Template(parents, self, body)
.
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 } }
An extractor class to create and pattern match with syntax This(qual)
.
An extractor class to create and pattern match with syntax This(qual)
.
This AST node corresponds to the following Scala code:
qual.this
The symbol of a This is the class to which the this refers. For instance in C.this, it would be C.
An extractor class to create and pattern match with syntax Throw(expr)
.
An extractor class to create and pattern match with syntax Throw(expr)
.
This AST node corresponds to the following Scala code:
throw
expr
An extractor class to create and pattern match with syntax Try(block, catches, finalizer)
.
An extractor class to create and pattern match with syntax Try(block, catches, finalizer)
.
This AST node corresponds to the following Scala code:
try
block catch
{ catches } finally
finalizer
If the finalizer is not present, the finalizer
is set to EmptyTree
.
An extractor class to create and pattern match with syntax TypeApply(fun, args)
.
An extractor class to create and pattern match with syntax TypeApply(fun, args)
.
This AST node corresponds to the following Scala code:
fun[args]
Should only be used with fun
nodes which are terms, i.e. which have isTerm
returning true
.
Otherwise AppliedTypeTree
should be used instead.
def foo[T] = ??? foo[Int] // represented as TypeApply(Ident(<foo>), List(TypeTree(<Int>)))
List[Int] as in val x: List[Int] = ???
// represented as AppliedTypeTree(Ident(<List>), List(TypeTree(<Int>)))
An extractor class to create and pattern match with syntax TypeBoundsTree(lo, hi)
.
An extractor class to create and pattern match with syntax TypeBoundsTree(lo, hi)
.
This AST node corresponds to the following Scala code:
>: lo <: hi
An extractor class to create and pattern match with syntax TypeDef(mods, name, tparams, rhs)
.
An extractor class to create and pattern match with syntax TypeDef(mods, name, tparams, rhs)
.
This AST node corresponds to the following Scala code:
mods type
name[tparams] = rhs
mods type
name[tparams] >: lo <: hi
First usage illustrates TypeDefs
representing type aliases and type parameters.
Second usage illustrates TypeDefs
representing abstract types,
where lo and hi are both TypeBoundsTrees
and Modifier.deferred
is set in mods.
An extractor class to create and pattern match with syntax TypeTree()
.
An extractor class to create and pattern match with syntax TypeTree()
.
This AST node does not have direct correspondence to Scala code,
and is emitted by everywhere when we want to wrap a Type
in a Tree
.
An extractor class to create and pattern match with syntax Typed(expr, tpt)
.
An extractor class to create and pattern match with syntax Typed(expr, tpt)
.
This AST node corresponds to the following Scala code:
expr: tpt
An extractor class to create and pattern match with syntax UnApply(fun, args)
.
An extractor class to create and pattern match with syntax UnApply(fun, args)
.
This AST node does not have direct correspondence to Scala code,
and is introduced when typechecking pattern matches and try
blocks.
An extractor class to create and pattern match with syntax ValDef(mods, name, tpt, rhs)
.
An extractor class to create and pattern match with syntax ValDef(mods, name, tpt, rhs)
.
This AST node corresponds to any of the following Scala code:
mods val
name: tpt = rhs
mods var
name: tpt = rhs
mods name: tpt = rhs // in signatures of function and method definitions
self: Bar => // self-types
If the type of a value is not specified explicitly (i.e. is meant to be inferred),
this is expressed by having tpt
set to TypeTree()
(but not to an EmptyTree
!).
The constructor/extractor for Alternative
instances.
The constructor/extractor for Annotated
instances.
The constructor/extractor for AppliedTypeTree
instances.
The constructor/extractor for Apply
instances.
The constructor/extractor for Assign
instances.
The constructor/extractor for AssignOrNamedArg
instances.
The constructor/extractor for Bind
instances.
The constructor/extractor for Block
instances.
The constructor/extractor for CaseDef
instances.
The constructor/extractor for ClassDef
instances.
The constructor/extractor for CompoundTypeTree
instances.
The constructor/extractor for DefDef
instances.
The constructor/extractor for ExistentialTypeTree
instances.
The constructor/extractor for Function
instances.
The constructor/extractor for Ident
instances.
The constructor/extractor for If
instances.
The constructor/extractor for Import
instances.
The constructor/extractor for ImportSelector
instances.
The constructor/extractor for LabelDef
instances.
The constructor/extractor for Literal
instances.
The constructor/extractor for Match
instances.
The constructor/extractor for ModuleDef
instances.
The constructor/extractor for New
instances.
The constructor/extractor for PackageDef
instances.
The constructor/extractor for RefTree
instances.
The constructor/extractor for Return
instances.
The constructor/extractor for Select
instances.
The constructor/extractor for SelectFromTypeTree
instances.
The constructor/extractor for SingletonTypeTree
instances.
The constructor/extractor for Star
instances.
The constructor/extractor for Super
instances.
The constructor/extractor for Template
instances.
The constructor/extractor for This
instances.
The constructor/extractor for Throw
instances.
The constructor/extractor for Try
instances.
The constructor/extractor for TypeApply
instances.
The constructor/extractor for TypeBoundsTree
instances.
The constructor/extractor for TypeDef
instances.
The constructor/extractor for TypeTree
instances.
The constructor/extractor for Typed
instances.
The constructor/extractor for UnApply
instances.
The constructor/extractor for ValDef
instances.
The constructor/extractor for Alternative
instances.
The constructor/extractor for Annotated
instances.
The constructor/extractor for AppliedTypeTree
instances.
The constructor/extractor for Apply
instances.
The constructor/extractor for Assign
instances.
The constructor/extractor for AssignOrNamedArg
instances.
The constructor/extractor for Bind
instances.
The constructor/extractor for Block
instances.
The constructor/extractor for CaseDef
instances.
The constructor/extractor for ClassDef
instances.
The constructor/extractor for CompoundTypeTree
instances.
The constructor/extractor for DefDef
instances.
The constructor/extractor for ExistentialTypeTree
instances.
The constructor/extractor for Function
instances.
The constructor/extractor for Ident
instances.
The constructor/extractor for If
instances.
The constructor/extractor for Import
instances.
The constructor/extractor for ImportSelector
instances.
The constructor/extractor for LabelDef
instances.
The constructor/extractor for Literal
instances.
The constructor/extractor for Match
instances.
The constructor/extractor for ModuleDef
instances.
The constructor/extractor for New
instances.
The constructor/extractor for PackageDef
instances.
The constructor/extractor for RefTree
instances.
The constructor/extractor for Return
instances.
The constructor/extractor for Select
instances.
The constructor/extractor for SelectFromTypeTree
instances.
The constructor/extractor for SingletonTypeTree
instances.
The constructor/extractor for Star
instances.
The constructor/extractor for Super
instances.
The constructor/extractor for Template
instances.
The constructor/extractor for This
instances.
The constructor/extractor for Throw
instances.
The constructor/extractor for Try
instances.
The constructor/extractor for TypeApply
instances.
The constructor/extractor for TypeBoundsTree
instances.
The constructor/extractor for TypeDef
instances.
The constructor/extractor for TypeTree
instances.
The constructor/extractor for Typed
instances.
The constructor/extractor for UnApply
instances.
The constructor/extractor for ValDef
instances.
(Since version 2.11.0) Use ModifiersExtractor instead
(Since version 2.11.0) Use ModifiersExtractor instead
(Since version 2.11.0) Use noSelfType
instead
(Since version 2.11.0) Use noSelfType
instead
EXPERIMENTAL
This trait defines the node types used in Scala abstract syntax trees (AST) and operations on them.
Trees are the basis for Scala's abstract syntax that is used to represent programs. They are also called abstract syntax trees and commonly abbreviated as ASTs.
In Scala reflection, APIs that produce or use
Tree
s are:Trees are immutable, except for three fields pos, symbol, and tpe, which are assigned when a tree is typechecked to attribute it with the information gathered by the typechecker.
Examples
The following creates an AST representing a literal 5 in Scala source code:
Literal(Constant(5))
The following creates an AST representing
print("Hello World")
:The following creates an AST from a literal 5, and then uses
showRaw
to print it in a readable format.For more information about
Tree
s, see the Reflection Guide: Symbols, Trees, Types.