W3cubDocs

/Scala 2.13 Reflection

Annotation scala.reflect.api.Trees.UnApply

abstract type UnApply >: Null <: Universe.UnApplyApi with Universe.TermTree

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
        // the <unapply-selector> here 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("<unapply-selector>")))),
        // 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).

Source
Trees.scala
Linear Supertypes
Universe.<refinement>, Universe.<refinement>, Universe.UnApplyApi, Universe.TermTreeApi, Universe.TreeApi, Product, Equals, AnyRef, Any

Abstract Value Members

abstract def args: List[Universe.Tree]

The arguments of the unapplication. See the example for scala.reflect.api.Trees#UnApplyExtractor.

Definition Classes
UnApplyApi

abstract def canEqual(that: Any): Boolean

Definition Classes
Equals

abstract def canHaveAttrs: Boolean

Can this tree carry attributes (i.e. symbols, types or positions)? Typically the answer is yes, except for the EmptyTree null object and two special singletons: noSelfType and pendingSuperCall.

Definition Classes
TreeApi

abstract def children: List[Universe.Tree]

The direct child trees of this tree. EmptyTrees are always omitted. Lists are flattened.

Definition Classes
TreeApi

abstract def collect[T](pf: PartialFunction[Universe.Tree, T]): List[T]

Apply pf to each subtree on which the function is defined and collect the results.

Definition Classes
TreeApi

abstract def duplicate: TreeApi.this.type

Make a copy of this tree, keeping all attributes, except that all positions are focused (so nothing in this tree will be found when searching by position).

Definition Classes
TreeApi

abstract def equalsStructure(that: Universe.Tree): Boolean

Tests whether two trees are structurally equal. Note that == on trees is reference equality.

Definition Classes
TreeApi

abstract def exists(p: (Universe.Tree) => Boolean): Boolean

Is there exists a part of this tree which satisfies predicate p?

Definition Classes
TreeApi

abstract def filter(f: (Universe.Tree) => Boolean): List[Universe.Tree]

Find all subtrees matching predicate p. Same as withFilter

Definition Classes
TreeApi

abstract def find(p: (Universe.Tree) => Boolean): Option[Universe.Tree]

Returns optionally first tree (in a preorder traversal) which satisfies predicate p, or None if none exists.

Definition Classes
TreeApi

abstract def forAll(p: (Universe.Tree) => Boolean): Boolean

Do all parts of this tree satisfy predicate p?

Definition Classes
TreeApi

abstract def foreach(f: (Universe.Tree) => Unit): Unit

Apply f to each subtree

Definition Classes
TreeApi

abstract def fun: Universe.Tree

A dummy node that carries the type of unapplication. See the example for scala.reflect.api.Trees#UnApplyExtractor.

Definition Classes
UnApplyApi

abstract def isDef: Boolean

Does this tree represent a definition? (of a method, of a class, etc)

Definition Classes
TreeApi

abstract def isEmpty: Boolean

Is this tree one of the empty trees?

Empty trees are: the EmptyTree null object and TypeTree instances that don't carry a type.

Definition Classes
TreeApi
See also

canHaveAttrs

abstract def isTerm: Boolean

The canonical way to test if a Tree represents a term.

Definition Classes
TreeApi

abstract def isType: Boolean

The canonical way to test if a Tree represents a type.

Definition Classes
TreeApi

abstract def nonEmpty: Boolean

Is this tree not an empty tree?

Definition Classes
TreeApi
See also

isEmpty

abstract def orElse(alt: => Universe.Tree): Universe.Tree

Provides an alternate if tree is empty

alt

The alternate tree

returns

If this tree is non empty, this tree, otherwise alt.

Definition Classes
TreeApi

abstract def pos: Universe.Position

Position of the tree.

Definition Classes
TreeApi

abstract def productArity: Int

Definition Classes
Product

abstract def productElement(n: Int): Any

Definition Classes
Product

abstract def symbol: Universe.Symbol

Symbol of the tree.

For most trees symbol is null. In SymTrees, it is overridden and implemented with a var, initialized to NoSymbol.

Trees which are not SymTrees but which carry symbols do so by overriding def symbol to forward it elsewhere. Examples:

    Super(qual, _) has qual's symbol, Apply(fun, args) has fun's symbol, TypeApply(fun, args) has fun's symbol, AppliedTypeTree(tpt, args) has tpt's symbol, TypeTree(tpe) has tpe's typeSymbol, if tpe != null.
Definition Classes
TreeApi

abstract def tpe: Universe.Type

Type of the tree.

Upon creation most trees have their tpe set to null. Types are typically assigned to trees during typechecking. Some node factory methods set tpe immediately after creation.

When the typechecker encounters a tree with a non-null tpe, it will assume it to be correct and not check it again. This means one has to be careful not to erase the tpe field of subtrees.

Definition Classes
TreeApi

abstract def withFilter(f: (Universe.Tree) => Boolean): List[Universe.Tree]

Find all subtrees matching predicate p. Same as filter

Definition Classes
TreeApi

Concrete Value Members

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 def asInstanceOf[T0]: T0

Definition Classes
Any

def clone(): AnyRef

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

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])

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

Definition Classes
AnyRef → Any
Annotations
@native()

def hashCode(): Int

Definition Classes
AnyRef → Any
Annotations
@native()

final def isInstanceOf[T0]: Boolean

Definition Classes
Any

final def ne(arg0: AnyRef): Boolean

Definition Classes
AnyRef

final def notify(): Unit

Definition Classes
AnyRef
Annotations
@native()

final def notifyAll(): Unit

Definition Classes
AnyRef
Annotations
@native()

def productElementName(n: Int): String

Definition Classes
Product

def productElementNames: Iterator[String]

Definition Classes
Product

def productIterator: Iterator[Any]

Definition Classes
Product

def productPrefix: String

Definition Classes
Product

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

Definition Classes
AnyRef

def toString(): String

Obtains string representation of a tree

Definition Classes
TreeApi → AnyRef → Any

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()

© 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/api/Trees$UnApply.html