Scala Reflection Library2.12.2-20170504-135222-21d12e9 < Back
 

# Packages

-  package root
  Definition Classes
    root
-  package scala
  Definition Classes
    root
-  package reflect
  Definition Classes
    scala
-  package api

  EXPERIMENTAL

  EXPERIMENTAL

  The Scala Reflection API (located in scala-reflect.jar).

  In Scala 2.10.0, the Scala Reflection API and its implementation have an "experimental" status. This means that the API and the docs are not complete and can be changed in binary- and source-incompatible manner in 2.10.1. This also means that the implementation has some known issues.

  The following types are the backbone of the Scala Reflection API, and serve as a good starting point for information about Scala Reflection:

  - scala.reflect.api.Symbols
  - scala.reflect.api.Types
  - scala.reflect.api.Mirrors
  - scala.reflect.api.Universe

  For more information about Scala Reflection, see the Reflection Guide

  Definition Classes
    reflect
- Annotations
- Constants
- Exprs
- FlagSets
- ImplicitTags
- Internals
- JavaUniverse
- Liftables
- Mirror
- Mirrors
- Names
- Position
- Positions
- Printers
- Quasiquotes
- Scopes
- StandardDefinitions
- StandardLiftables
- StandardNames
- Symbols
- TreeCreator
- Trees
- TypeCreator
- TypeTags
- Types
- Universe

t

scala.reflect.api

# Printers 

###

#### trait Printers extends AnyRef

EXPERIMENTAL

Utilities for nicely printing scala.reflect.api.Trees and scala.reflect.api.Types.

##### Printing Trees

The method `show` displays the "prettified" representation of reflection artifacts. This representation provides one with the desugared Java representation of Scala code. For example:

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

    scala> def tree = reify{ final class C { def x = 2 } }.tree
    tree: reflect.runtime.universe.Tree

    scala> show(tree)
    res0: String =
    {
      final class C extends AnyRef {
        def <init>() = {
          super.<init>();
          ()
        };
        def x = 2
      };
      ()
    }

The method `showRaw` displays internal structure of a given reflection object as a Scala abstract syntax tree (AST), the representation that the Scala typechecker operates on.

Note, that while this representation appears to generate correct trees that one might think would be possible to use in a macro implementation, this is not usually the case. Symbols aren't fully represented (only their names are). Thus, this method is best-suited for use simply inspecting ASTs given some valid Scala code.

    scala> showRaw(tree)
    res1: String = Block(List(
      ClassDef(Modifiers(FINAL), TypeName("C"), List(), Template(
        List(Ident(TypeName("AnyRef"))),
        noSelfType,
        List(
          DefDef(Modifiers(), nme.CONSTRUCTOR, List(), List(List()), TypeTree(),
            Block(List(
              Apply(Select(Super(This(tpnme.EMPTY), tpnme.EMPTY), nme.CONSTRUCTOR), List())),
              Literal(Constant(())))),
          DefDef(Modifiers(), TermName("x"), List(), List(), TypeTree(),
            Literal(Constant(2))))))),
      Literal(Constant(())))

The method `showRaw` can also print scala.reflect.api.Types next to the artifacts being inspected

    scala> import scala.tools.reflect.ToolBox // requires scala-compiler.jar
    import scala.tools.reflect.ToolBox

    scala> import scala.reflect.runtime.{currentMirror => cm}
    import scala.reflect.runtime.{currentMirror=>cm}

    scala> showRaw(cm.mkToolBox().typecheck(tree), printTypes = true)
    res2: String = Block[1](List(
      ClassDef[2](Modifiers(FINAL), TypeName("C"), List(), Template[3](
        List(Ident[4](TypeName("AnyRef"))),
        noSelfType,
        List(
          DefDef[2](Modifiers(), nme.CONSTRUCTOR, List(), List(List()), TypeTree[3](),
            Block[1](List(
              Apply[4](Select[5](Super[6](This[3](TypeName("C")), tpnme.EMPTY), ...))),
              Literal[1](Constant(())))),
          DefDef[2](Modifiers(), TermName("x"), List(), List(), TypeTree[7](),
            Literal[8](Constant(2))))))),
      Literal[1](Constant(())))
    [1] TypeRef(ThisType(scala), scala.Unit, List())
    [2] NoType
    [3] TypeRef(NoPrefix, TypeName("C"), List())
    [4] TypeRef(ThisType(java.lang), java.lang.Object, List())
    [5] MethodType(List(), TypeRef(ThisType(java.lang), java.lang.Object, List()))
    [6] SuperType(ThisType(TypeName("C")), TypeRef(... java.lang.Object ...))
    [7] TypeRef(ThisType(scala), scala.Int, List())
    [8] ConstantType(Constant(2))

##### Printing Types

The method `show`

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

    scala> def tpe = typeOf[{ def x: Int; val y: List[Int] }]
    tpe: reflect.runtime.universe.Type

    scala> show(tpe)
    res0: String = scala.AnyRef{def x: Int; val y: scala.List[Int]}

Like the method `showRaw` for scala.reflect.api.Trees, `showRaw` for scala.reflect.api.Types provides a visualization of the Scala AST operated on by the Scala typechecker.

    // showRaw has already been discussed above
    scala> showRaw(tpe)
    res1: String = RefinedType(
      List(TypeRef(ThisType(scala), TypeName("AnyRef"), List())),
      Scope(
        TermName("x"),
        TermName("y")))

`printIds` and/or `printKinds` can additionally be supplied as arguments in a call to `showRaw` which additionally shows the unique identifiers of symbols.

    scala> showRaw(tpe, printIds = true, printKinds = true)
    res2: String = RefinedType(
      List(TypeRef(ThisType(scala#2043#PK), TypeName("AnyRef")#691#TPE, List())),
      Scope(
        TermName("x")#2540#METH,
        TermName("y")#2541#GET))

For more details about `Printer`s and other aspects of Scala reflection, see the Reflection Guide

Self Type
  Universe
Source
  Printers.scala

Linear Supertypes
AnyRef, Any
Known Subclasses
JavaUniverse, Universe, Universe
Type Hierarchy
 
Ordering

1. Grouped
2. Alphabetic
3. By Inheritance

Inherited

1. Printers
2. AnyRef
3. Any

Implicitly

1. by any2stringadd
2. by StringFormat
3. by Ensuring
4. by ArrowAssoc

1. Hide All
2. Show All

Visibility

1. Public
2. All

### Type Members

1.  case class BooleanFlag (value: Option[Boolean]) extends Product with Serializable

2.  trait TreePrinter extends AnyRef

   Attributes
     protected

### Abstract Value Members

1.  abstract def newCodePrinter(out: PrintWriter, tree: Universe.Tree, printRootPkg: Boolean): Universe.TreePrinter

   Hook to define what `showCode(...)` means.

   Hook to define what `showCode(...)` means.

   Attributes
     protected
2.  abstract def newRawTreePrinter(out: PrintWriter): Universe.TreePrinter

   Hook to define what `showRaw(...)` means.

   Hook to define what `showRaw(...)` means.

   Attributes
     protected
3.  abstract def newTreePrinter(out: PrintWriter): Universe.TreePrinter

   Hook to define what `show(...)` means.

   Hook to define what `show(...)` means.

   Attributes
     protected
4.  abstract def show(position: Universe.Position): String

   Renders a prettified representation of a position.

5.  abstract def show(flags: Universe.FlagSet): String

   Renders a prettified representation of a flag set.

6.  abstract def show(name: Universe.Name): String

   Renders a prettified representation of a name.

7.  abstract def showDecl(sym: Universe.Symbol): String

   Renders a string that represents a declaration of this symbol written in Scala.

### Concrete Value Members

1.  final def !=(arg0: Any): Boolean
   Definition Classes
     AnyRef → Any
2.  final def ##(): Int
   Definition Classes
     AnyRef → Any
3.  def +(other: String): String
   Implicit
     This member is added by an implicit conversion from Printers to any2stringadd[Printers] performed by method any2stringadd in scala.Predef.
   Definition Classes
     any2stringadd
4.  def ->[B](y: B): (Printers, B)
   Implicit
     This member is added by an implicit conversion from Printers to ArrowAssoc[Printers] performed by method ArrowAssoc in scala.Predef.
   Definition Classes
     ArrowAssoc
   Annotations
     @inline()
5.  final def ==(arg0: Any): Boolean
   Definition Classes
     AnyRef → Any
6.  final def asInstanceOf[T0]: T0
   Definition Classes
     Any
7.  def clone(): AnyRef
   Attributes
     protected[java.lang]
   Definition Classes
     AnyRef
   Annotations
     @throws( ... )
8.  def ensuring(cond: (Printers) ⇒ Boolean, msg: ⇒ Any): Printers
   Implicit
     This member is added by an implicit conversion from Printers to Ensuring[Printers] performed by method Ensuring in scala.Predef.
   Definition Classes
     Ensuring
9.  def ensuring(cond: (Printers) ⇒ Boolean): Printers
   Implicit
     This member is added by an implicit conversion from Printers to Ensuring[Printers] performed by method Ensuring in scala.Predef.
   Definition Classes
     Ensuring
10.  def ensuring(cond: Boolean, msg: ⇒ Any): Printers
    Implicit
      This member is added by an implicit conversion from Printers to Ensuring[Printers] performed by method Ensuring in scala.Predef.
    Definition Classes
      Ensuring
11.  def ensuring(cond: Boolean): Printers
    Implicit
      This member is added by an implicit conversion from Printers to Ensuring[Printers] performed by method Ensuring in scala.Predef.
    Definition Classes
      Ensuring
12.  final def eq(arg0: AnyRef): Boolean
    Definition Classes
      AnyRef
13.  def equals(arg0: Any): Boolean
    Definition Classes
      AnyRef → Any
14.  def finalize(): Unit
    Attributes
      protected[java.lang]
    Definition Classes
      AnyRef
    Annotations
      @throws( classOf[java.lang.Throwable] )
15.  def formatted(fmtstr: String): String
    Implicit
      This member is added by an implicit conversion from Printers to StringFormat[Printers] performed by method StringFormat in scala.Predef.
    Definition Classes
      StringFormat
    Annotations
      @inline()
16.  final def getClass(): Class[_]
    Definition Classes
      AnyRef → Any
17.  def hashCode(): Int
    Definition Classes
      AnyRef → Any
18.  final def isInstanceOf[T0]: Boolean
    Definition Classes
      Any
19.  final def ne(arg0: AnyRef): Boolean
    Definition Classes
      AnyRef
20.  final def notify(): Unit
    Definition Classes
      AnyRef
21.  final def notifyAll(): Unit
    Definition Classes
      AnyRef
22.  def render(what: Any, mkPrinter: (PrintWriter) ⇒ Universe.TreePrinter, printTypes: Universe.BooleanFlag = None, printIds: Universe.BooleanFlag = None, printOwners: Universe.BooleanFlag = None, printKinds: Universe.BooleanFlag = None, printMirrors: Universe.BooleanFlag = None, printPositions: Universe.BooleanFlag = None): String

    Attributes
      protected
23.  def show(any: Any, printTypes: Universe.BooleanFlag = None, printIds: Universe.BooleanFlag = None, printOwners: Universe.BooleanFlag = None, printKinds: Universe.BooleanFlag = None, printMirrors: Universe.BooleanFlag = None, printPositions: Universe.BooleanFlag = None): String

    Renders a representation of a reflection artifact as desugared Scala code.

24.  def showCode(tree: Universe.Tree, printTypes: Universe.BooleanFlag = None, printIds: Universe.BooleanFlag = None, printOwners: Universe.BooleanFlag = None, printPositions: Universe.BooleanFlag = None, printRootPkg: Boolean = false): String

    Renders the code of the passed tree, so that: 1) it can be later compiled by scalac retaining the same meaning, 2) it looks pretty.

    Renders the code of the passed tree, so that: 1) it can be later compiled by scalac retaining the same meaning, 2) it looks pretty. #1 is available for unattributed trees and attributed trees #2 is more or less okay indentation-wise, but at the moment there's a lot of desugaring left in place, and that's what we plan to improve in the future. printTypes, printIds, printPositions options have the same meaning as for TreePrinter printRootPkg option is available only for attributed trees.

25.  def showRaw(position: Universe.Position): String

    Renders internal structure of a position.

26.  def showRaw(flags: Universe.FlagSet): String

    Renders internal structure of a flag set.

27.  def showRaw(name: Universe.Name): String

    Renders internal structure of a name.

28.  def showRaw(any: Any, printTypes: Universe.BooleanFlag = None, printIds: Universe.BooleanFlag = None, printOwners: Universe.BooleanFlag = None, printKinds: Universe.BooleanFlag = None, printMirrors: Universe.BooleanFlag = None, printPositions: Universe.BooleanFlag = None): String

    Renders internal structure of a reflection artifact as the visualization of a Scala syntax tree.

29.  final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
      AnyRef
30.  def toString(): String
    Definition Classes
      AnyRef → Any
31.  def treeToString(tree: Universe.Tree): String

    By default trees are printed with `show`

    By default trees are printed with `show`

    Attributes
      protected
32.  final def wait(): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws( ... )
33.  final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws( ... )
34.  final def wait(arg0: Long): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws( ... )
35.  def →[B](y: B): (Printers, B)
    Implicit
      This member is added by an implicit conversion from Printers to ArrowAssoc[Printers] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
      ArrowAssoc
36.  object BooleanFlag extends Serializable

### Inherited from AnyRef

### Inherited from Any

### Inherited by implicit conversion any2stringadd from Printers to any2stringadd[Printers]

### Inherited by implicit conversion StringFormat from Printers to StringFormat[Printers]

### Inherited by implicit conversion Ensuring from Printers to Ensuring[Printers]

### Inherited by implicit conversion ArrowAssoc from Printers to ArrowAssoc[Printers]

### Printers

### Ungrouped