Alternatives of patterns.
The API that all alternatives support
An extractor class to create and pattern match with syntax Alternative(trees)
.
A tree that has an annotation attached to it.
The API that all annotateds support
An extractor class to create and pattern match with syntax Annotated(annot, arg)
.
Applied type <tpt> [ <args> ], eliminated by RefCheck
The API that all applied type trees support
An extractor class to create and pattern match with syntax AppliedTypeTree(tpt, args)
.
Value application
The API that all applies support
An extractor class to create and pattern match with syntax Apply(fun, args)
.
Assignment
The API that all assigns support
An extractor class to create and pattern match with syntax Assign(lhs, rhs)
.
Either an assignment or a named argument.
The API that all assigns support
An extractor class to create and pattern match with syntax AssignOrNamedArg(lhs, rhs)
.
Bind a variable to a rhs pattern.
The API that all binds support
An extractor class to create and pattern match with syntax Bind(name, body)
.
Block of expressions (semicolon separated expressions)
The API that all blocks support
An extractor class to create and pattern match with syntax Block(stats, expr)
.
Case clause in a pattern match.
The API that all case defs support
An extractor class to create and pattern match with syntax CaseDef(pat, guard, body)
.
A class definition.
The API that all class defs support
An extractor class to create and pattern match with syntax ClassDef(mods, name, tparams, impl)
.
Intersection type <parent1> with .
The API that all compound type trees support
An extractor class to create and pattern match with syntax CompoundTypeTree(templ)
.
A method or macro definition.
The API that all def defs support
An extractor class to create and pattern match with syntax DefDef(mods, name, tparams, vparamss, tpt, rhs)
.
A tree which defines a symbol-carrying entity.
The API that all def trees support
Existential type tree node
The API that all existential type trees support
An extractor class to create and pattern match with syntax ExistentialTypeTree(tpt, whereClauses)
.
Anonymous function, eliminated by compiler phase lambdalift
The API that all functions support
An extractor class to create and pattern match with syntax Function(vparams, body)
.
Common base class for Apply and TypeApply.
The API that all applies support
A reference to identifier name
.
The API that all idents support
An extractor class to create and pattern match with syntax Ident(qual, name)
.
Conditional expression
The API that all ifs support
An extractor class to create and pattern match with syntax If(cond, thenp, elsep)
.
A common base class for class and object definitions.
The API that all impl defs support
Import clause
The API that all imports support
An extractor class to create and pattern match with syntax Import(expr, selectors)
.
Import selector
The API that all import selectors support
An extractor class to create and pattern match with syntax ImportSelector(name:, namePos, rename, renamePos)
.
A labelled expression.
The API that all label defs support
An extractor class to create and pattern match with syntax LabelDef(name, params, rhs)
.
Literal
The API that all literals support
An extractor class to create and pattern match with syntax Literal(value)
.
- Pattern matching expression (before compiler phase explicitouter before 2.
The API that all matches support
An extractor class to create and pattern match with syntax Match(selector, cases)
.
Common base class for all member definitions: types, classes, objects, packages, vals and vars, defs.
The API that all member defs support
The type of tree modifiers.
The API that all Modifiers support
An extractor class to create and pattern match with syntax Modifiers(flags, privateWithin, annotations)
.
An object definition, e.
The API that all module defs support
An extractor class to create and pattern match with syntax ModuleDef(mods, name, impl)
.
A tree with a name - effectively, a DefTree or RefTree.
The API that all name trees support
Object instantiation
The API that all news support
An extractor class to create and pattern match with syntax New(tpt)
.
A packaging, such as package pid { stats }
The API that all package defs support
An extractor class to create and pattern match with syntax PackageDef(pid, stats)
.
A tree which references a symbol-carrying entity.
The API that all ref trees support
An extractor class to create and pattern match with syntax RefTree(qual, name)
.
Marks underlying reference to id as boxed.
The API that all references support
An extractor class to create and pattern match with syntax ReferenceToBoxed(ident)
.
Return expression
The API that all returns support
An extractor class to create and pattern match with syntax Return(expr)
.
A member selection <qualifier> .
The API that all selects support
An extractor class to create and pattern match with syntax Select(qual, name)
.
Type selection <qualifier> # <name>, eliminated by RefCheck
The API that all selects from type trees support
An extractor class to create and pattern match with syntax SelectFromTypeTree(qualifier, name)
.
Singleton type, eliminated by RefCheck
The API that all singleton type trees support
An extractor class to create and pattern match with syntax SingletonTypeTree(ref)
.
Repetition of pattern.
The API that all stars support
An extractor class to create and pattern match with syntax Star(elem)
.
Super reference, where qual
is the corresponding this
reference.
The API that all supers support
An extractor class to create and pattern match with syntax Super(qual, mix)
.
A tree with a mutable symbol field, initialized to NoSymbol.
The API that all sym trees support
Instantiation template of a class or trait
The API that all templates support
An extractor class to create and pattern match with syntax Template(parents, self, body)
.
A tree for a term.
The API that all term trees support
Self reference
The API that all thises support
An extractor class to create and pattern match with syntax This(qual)
.
Throw expression
The API that all tries support
An extractor class to create and pattern match with syntax Throw(expr)
.
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 Scala abstract syntax trees.
The API that all trees support.
The type of standard (lazy) tree copiers.
The API of a tree copier.
Try catch node
The API that all tries support
An extractor class to create and pattern match with syntax Try(block, catches, finalizer)
.
A tree for a type.
The API that all typ trees support
Explicit type application.
The API that all type applies support
An extractor class to create and pattern match with syntax TypeApply(fun, args)
.
Type bounds tree node
The API that all type bound trees support
An extractor class to create and pattern match with syntax TypeBoundsTree(lo, hi)
.
An abstract type, a type parameter, or a type alias.
The API that all type defs support
An extractor class to create and pattern match with syntax TypeDef(mods, name, tparams, rhs)
.
A synthetic tree holding an arbitrary type.
The API that all type trees support
An extractor class to create and pattern match with syntax TypeTree()
.
Type annotation, eliminated by compiler phase cleanup
The API that all typeds support
An extractor class to create and pattern match with syntax Typed(expr, tpt)
.
Used to represent unapply
methods in pattern matching.
The API that all unapplies support
An extractor class to create and pattern match with syntax UnApply(fun, args)
.
Broadly speaking, a value definition.
The API that all val defs support
An extractor class to create and pattern match with syntax ValDef(mods, name, tpt, rhs)
.
A common base class for ValDefs and DefDefs.
The API that all val defs and def defs support
(Since version 2.11.0) Use ModifiersExtractor instead
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 empty tree
The constructor/extractor for ExistentialTypeTree
instances.
The constructor/extractor for Function
instances.
A factory method for Ident
nodes.
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 Modifiers
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 ReferenceToBoxed
instances.
The constructor/extractor for Return
instances.
A factory method for Select
nodes.
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.
A factory method for This
nodes.
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.
A factory method for TypeTree
nodes.
The constructor/extractor for TypeTree
instances.
The constructor/extractor for Typed
instances.
The constructor/extractor for UnApply
instances.
The constructor/extractor for ValDef
instances.
Creates a lazy tree copier.
Creates a strict tree copier.
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.
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.
Obtains string representation of a tree
Obtains string representation of a tree
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 ClassDef
nodes.
A factory method for ClassDef
nodes.
(Since version 2.10.1) Use the canonical ClassDef constructor to create a class and then initialize its position and symbol manually
A factory method for ValDef
nodes.
A factory method for ValDef
nodes.
(Since version 2.10.1) Use the canonical DefDef constructor to create a method and then initialize its position and symbol manually
A factory method for ValDef
nodes.
A factory method for ValDef
nodes.
(Since version 2.10.1) Use the canonical DefDef constructor to create a method and then initialize its position and symbol manually
A factory method for ValDef
nodes.
A factory method for ValDef
nodes.
(Since version 2.10.1) Use the canonical DefDef constructor to create a method and then initialize its position and symbol manually
A factory method for ValDef
nodes.
A factory method for ValDef
nodes.
(Since version 2.10.1) Use the canonical DefDef constructor to create a method and then initialize its position and symbol manually
A factory method for ValDef
nodes.
A factory method for ValDef
nodes.
(Since version 2.10.1) Use the canonical DefDef constructor to create a method and then initialize its position and symbol manually
A factory method for Ident
nodes.
A factory method for Ident
nodes.
(Since version 2.10.1) Use Ident(TermName(name)) instead
A factory method for LabelDef
nodes.
A factory method for LabelDef
nodes.
(Since version 2.10.1) Use the canonical LabelDef constructor to create a label and then initialize its position and symbol manually
A factory method for ModuleDef
nodes.
A factory method for ModuleDef
nodes.
(Since version 2.10.1) Use the canonical ModuleDef constructor to create an object and then initialize its position and symbol manually
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 TypeDef
nodes.
A factory method for TypeDef
nodes.
(Since version 2.10.1) Use the canonical TypeDef constructor to create an abstract type or type parameter and then initialize its position and symbol manually
A factory method for TypeDef
nodes.
A factory method for TypeDef
nodes.
(Since version 2.10.1) Use the canonical TypeDef constructor to create a type alias and then initialize its position and symbol manually
A factory method for ValDef
nodes.
A factory method for ValDef
nodes.
(Since version 2.10.1) Use the canonical ValDef constructor to create a val with an empty right-hand side and then initialize its position and symbol manually
A factory method for ValDef
nodes.
A factory method for ValDef
nodes.
(Since version 2.10.1) Use the canonical ValDef constructor to create a val and then initialize its position and symbol manually
(Since version 2.11.0) Use noSelfType
instead
The factory for Modifiers
instances.
The factory for Modifiers
instances.
An empty Modifiers
object: no flags, empty visibility annotation and no Scala annotations.
Delegates the transformation strategy to scala.reflect.internal.Trees
,
because pattern matching on abstract types we have here degrades performance.
Delegates the transformation strategy to scala.reflect.internal.Trees
,
because pattern matching on abstract types we have here degrades performance.
Delegates the traversal strategy to scala.reflect.internal.Trees
,
because pattern matching on abstract types we have here degrades performance.
Delegates the traversal strategy to scala.reflect.internal.Trees
,
because pattern matching on abstract types we have here degrades performance.
The standard (lazy) tree copier.
Provides an extension hook for the transformation strategy.
Provides an extension hook for the transformation strategy. Future-proofs against new node types.
Provides an extension hook for the traversal strategy.
Provides an extension hook for the traversal strategy. Future-proofs against new node types.
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.
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.
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.