W3cubDocs

/Scala 2.12 Reflection

Class scala.reflect.api.Types.TypeApi

abstract class TypeApi extends AnyRef

The API of types. The main source of information about types is the scala.reflect.api.Types page.

Source
Types.scala
Linear Supertypes
Known Subclasses

Instance Constructors

new TypeApi()

Abstract Value Members

abstract def <:<(that: Universe.Type): Boolean

abstract def =:=(that: Universe.Type): Boolean

abstract def asSeenFrom(pre: Universe.Type, clazz: Universe.Symbol): Universe.Type

This type as seen from prefix pre and class clazz. This means: Replace all ThisTypes of clazz or one of its subclasses by pre and instantiate all parameters by arguments of pre. Proceed analogously for ThisTypes referring to outer classes.

Example:

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> class D[T] { def m: T = ??? }
defined class D

scala> class C extends D[Int]
defined class C

scala> val D = typeOf[D[_]].typeSymbol.asClass
D: reflect.runtime.universe.ClassSymbol = class D

scala> val C = typeOf[C].typeSymbol.asClass
C: reflect.runtime.universe.ClassSymbol = class C

scala> val T = D.typeParams(0).asType.toType
T: reflect.runtime.universe.Type = T

scala> T.asSeenFrom(ThisType(C), D)
res0: reflect.runtime.universe.Type = scala.Int

abstract def baseClasses: List[Universe.Symbol]

abstract def baseType(clazz: Universe.Symbol): Universe.Type

The least type instance of given class which is a super-type of this type. Example:

class D[T]
class C extends p.D[Int]
ThisType(C).baseType(D) = p.D[Int]

abstract def companion: Universe.Type

Type signature of the companion of the underlying class symbol. NoType if the underlying symbol is not a class symbol, or if it doesn't have a companion.

abstract def contains(sym: Universe.Symbol): Boolean

abstract def dealias: Universe.Type

Expands type aliases arising from type members. Note that type aliases can hide beneath singleton types and singleton types can hide inside type aliases. Moreover, aliases might lurk in the upper bounds of abstract types. Therefore careful thought has to be applied to identify and carry out unwrapping logic specific to your use case.

abstract def decl(name: Universe.Name): Universe.Symbol

The defined or declared members with name name in this type; an OverloadedSymbol if several exist, NoSymbol if none exist. Alternatives of overloaded symbol appear in the order they are declared.

abstract def decls: Universe.MemberScope

A Scope containing directly declared members of this type. Unlike members this method doesn't returns inherited members.

Members in the returned scope might appear in arbitrary order. Use declarations.sorted to get an ordered list of members.

abstract def erasure: Universe.Type

abstract def etaExpand: Universe.Type

Converts higher-kinded TypeRefs to PolyTypes. Functions on types are also implemented as PolyTypes.

Example: (in the below, <List> is the type constructor of List) TypeRef(pre, <List>, List()) is replaced by PolyType(X, TypeRef(pre, <List>, List(X)))

abstract def exists(p: (Universe.Type) ⇒ Boolean): Boolean

abstract def finalResultType: Universe.Type

For a curried/nullary method or poly type its non-method result type, the type itself for all other types.

scala> class C {
     | def foo[T](x: T)(y: T) = ???
     | def bar: Int = ???
     | }
defined class C

scala> typeOf[C].member(TermName("foo")).asMethod
res0: reflect.runtime.universe.MethodSymbol = method foo

scala> res0.info // PolyType wrapping a MethodType
res1: reflect.runtime.universe.Type = [T](x: T)(y: T)scala.Nothing

scala> res1.resultType // MethodType wrapping a MethodType
res2: reflect.runtime.universe.Type = (x: T)(y: T)scala.Nothing

scala> res1.resultType.resultType // vanilla MethodType
res3: reflect.runtime.universe.Type = (y: T)scala.Nothing

scala> res1.resultType.resultType.resultType
res4: reflect.runtime.universe.Type = scala.Nothing

scala> res1.finalResultType
res5: reflect.runtime.universe.Type = scala.Nothing

scala> typeOf[C].member(TermName("bar")).asMethod
res6: reflect.runtime.universe.MethodSymbol = method bar

scala> res6.info
res7: reflect.runtime.universe.Type = => scala.Int

scala> res6.info.resultType
res8: reflect.runtime.universe.Type = scala.Int

scala> res6.info.finalResultType
res9: reflect.runtime.universe.Type = scala.Int
See also

resultType

abstract def find(p: (Universe.Type) ⇒ Boolean): Option[Universe.Type]

abstract def foreach(f: (Universe.Type) ⇒ Unit): Unit

abstract def map(f: (Universe.Type) ⇒ Universe.Type): Universe.Type

Apply f to each part of this type, returning a new type. children get mapped before their parents

abstract def member(name: Universe.Name): Universe.Symbol

abstract def members: Universe.MemberScope

A Scope containing all members of this type (directly declared or inherited). Unlike declarations this method also returns inherited members.

Members in the returned scope might appear in arbitrary order. Use declarations.sorted to get an ordered list of members.

abstract def orElse(alt: ⇒ Universe.Type): Universe.Type

abstract def paramLists: List[List[Universe.Symbol]]

abstract def resultType: Universe.Type

For a (nullary) method or poly type, its direct result type (can be a MethodType if the method has multiple argument lists), the type itself for all other types.

scala> class C { def foo[T](x: T)(y: T) = ??? }
defined class C

scala> typeOf[C].member(TermName("foo")).asMethod
res0: reflect.runtime.universe.MethodSymbol = method foo

scala> res0.info // PolyType wrapping a MethodType
res1: reflect.runtime.universe.Type = [T](x: T)(y: T)scala.Nothing

scala> res1.resultType // MethodType wrapping a MethodType
res2: reflect.runtime.universe.Type = (x: T)(y: T)scala.Nothing

scala> res1.resultType.resultType // vanilla MethodType
res3: reflect.runtime.universe.Type = (y: T)scala.Nothing

scala> res1.resultType.resultType.resultType
res4: reflect.runtime.universe.Type = scala.Nothing

scala> res1.finalResultType
res5: reflect.runtime.universe.Type = scala.Nothing
See also

finalResultType

abstract def substituteSymbols(from: List[Universe.Symbol], to: List[Universe.Symbol]): Universe.Type

abstract def substituteTypes(from: List[Universe.Symbol], to: List[Universe.Type]): Universe.Type

abstract def takesTypeArgs: Boolean

abstract def termSymbol: Universe.Symbol

abstract def typeArgs: List[Universe.Type]

List of type arguments ingrained in this type reference. Depending on your use case you might or might not want to call dealias first.

scala> type T = List[Int]
defined type alias T

scala> typeOf[T].typeArgs
res0: List[reflect.runtime.universe.Type] = List()

scala> typeOf[T].dealias.typeArgs
res1: List[reflect.runtime.universe.Type] = List(scala.Int)

abstract def typeConstructor: Universe.Type

Returns the corresponding type constructor (e.g. List for List[T] or List[String])

abstract def typeParams: List[Universe.Symbol]

abstract def typeSymbol: Universe.Symbol

abstract def weak_<:<(that: Universe.Type): Boolean

Does this type weakly conform to given type argument that, i.e., either conforms in terms of <:< or both are primitive number types that conform according to Section "Weak Conformance" in the spec. For example, Int weak_<:< Long.

abstract def widen: Universe.Type

If this is a singleton type, widen it to its nearest underlying non-singleton base type by applying one or more underlying dereferences. If this is not a singleton type, returns this type itself.

Example:

class Outer { class C ; val x: C } val o: Outer <o.x.type>.widen = o.C

Note that type aliases can hide beneath singleton types and singleton types can hide inside type aliases. Moreover, aliases might lurk in the upper bounds of abstract types. Therefore careful thought has to be applied to identify and carry out unwrapping logic specific to your use case.

abstract def declaration(name: Universe.Name): Universe.Symbol

Annotations
@deprecated
Deprecated

(Since version 2.11.0) use decl instead

See also

decl

abstract def declarations: Universe.MemberScope

Annotations
@deprecated
Deprecated

(Since version 2.11.0) use decls instead

See also

decls

abstract def normalize: Universe.Type

Reduce to beta eta-long normal form. Expands type aliases and converts higher-kinded TypeRefs to PolyTypes. Functions on types are also implemented as PolyTypes.

Example: (in the below, <List> is the type constructor of List) TypeRef(pre, <List>, List()) is replaced by PolyType(X, TypeRef(pre, <List>, List(X)))

Annotations
@deprecated
Deprecated

(Since version 2.11.0) use dealias or etaExpand instead

abstract def paramss: List[List[Universe.Symbol]]

Annotations
@deprecated
Deprecated

(Since version 2.11.0) use paramLists instead

See also

paramLists

Concrete Value Members

final def !=(arg0: Any): Boolean

Definition Classes
AnyRef → Any

final def ##(): Int

Definition Classes
AnyRef → Any

def +(other: String): String

Implicit
This member is added by an implicit conversion from Universe.TypeApi to any2stringadd[Universe.TypeApi] performed by method any2stringadd in scala.Predef.
Definition Classes
any2stringadd

def ->[B](y: B): (Universe.TypeApi, B)

Implicit
This member is added by an implicit conversion from Universe.TypeApi to ArrowAssoc[Universe.TypeApi] performed by method ArrowAssoc in scala.Predef.
Definition Classes
ArrowAssoc
Annotations
@inline()

final def ==(arg0: Any): Boolean

Definition Classes
AnyRef → Any

final def asInstanceOf[T0]: T0

Definition Classes
Any

def clone(): AnyRef

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

def ensuring(cond: (Universe.TypeApi) ⇒ Boolean, msg: ⇒ Any): Universe.TypeApi

Implicit
This member is added by an implicit conversion from Universe.TypeApi to Ensuring[Universe.TypeApi] performed by method Ensuring in scala.Predef.
Definition Classes
Ensuring

def ensuring(cond: (Universe.TypeApi) ⇒ Boolean): Universe.TypeApi

Implicit
This member is added by an implicit conversion from Universe.TypeApi to Ensuring[Universe.TypeApi] performed by method Ensuring in scala.Predef.
Definition Classes
Ensuring

def ensuring(cond: Boolean, msg: ⇒ Any): Universe.TypeApi

Implicit
This member is added by an implicit conversion from Universe.TypeApi to Ensuring[Universe.TypeApi] performed by method Ensuring in scala.Predef.
Definition Classes
Ensuring

def ensuring(cond: Boolean): Universe.TypeApi

Implicit
This member is added by an implicit conversion from Universe.TypeApi to Ensuring[Universe.TypeApi] performed by method Ensuring in scala.Predef.
Definition Classes
Ensuring

final def eq(arg0: AnyRef): Boolean

Definition Classes
AnyRef

def equals(arg0: Any): Boolean

Definition Classes
AnyRef → Any

def finalize(): Unit

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

def formatted(fmtstr: String): String

Implicit
This member is added by an implicit conversion from Universe.TypeApi to StringFormat[Universe.TypeApi] performed by method StringFormat in scala.Predef.
Definition Classes
StringFormat
Annotations
@inline()

final def getClass(): Class[_]

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

final def synchronized[T0](arg0: ⇒ T0): T0

Definition Classes
AnyRef

def toString(): String

Definition Classes
AnyRef → Any

final def wait(): Unit

Definition Classes
AnyRef
Annotations
@throws( ... )

final def wait(arg0: Long, arg1: Int): Unit

Definition Classes
AnyRef
Annotations
@throws( ... )

final def wait(arg0: Long): Unit

Definition Classes
AnyRef
Annotations
@throws( ... ) @native()

def [B](y: B): (Universe.TypeApi, B)

Implicit
This member is added by an implicit conversion from Universe.TypeApi to ArrowAssoc[Universe.TypeApi] performed by method ArrowAssoc in scala.Predef.
Definition Classes
ArrowAssoc

© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.12.9/scala-reflect/scala/reflect/api/Types$TypeApi.html