blob: 15fba0e4180a33905698bc92e73f691bb9630684 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
package scala.reflect
package api
import java.io.{ PrintWriter, StringWriter }
trait TreePrinters { self: Universe =>
trait TreePrinter {
def print(args: Any*)
protected var typesPrinted = false
protected var uniqueIds = false
def withTypesPrinted: this.type = { typesPrinted = true; this }
def withUniqueIds: this.type = { uniqueIds = true; this }
}
def show(tree: Tree, mkPrinter: PrintWriter => TreePrinter = newTreePrinter): String = {
val buffer = new StringWriter()
val writer = new PrintWriter(buffer)
val printer = mkPrinter(writer)
printer.print(tree)
writer.flush()
buffer.toString
}
def showRaw(tree: Tree): String = show(tree, new RawTreePrinter(_))
/** Hook to define what `show(tree)` means.
*/
def newTreePrinter(out: PrintWriter): TreePrinter
class RawTreePrinter(out: PrintWriter) extends TreePrinter {
def print(args: Any*): Unit = args foreach {
case EmptyTree =>
print("EmptyTree")
case tree @ TypeTree() =>
print("TypeTree()")
if (tree.tpe != null)
print(".setType(", tree.tpe, ")")
else if (tree.original != null)
print(".setOriginal(", tree.original, ")")
case tree: Tree =>
print(tree.productPrefix+"(")
val it = tree.productIterator
while (it.hasNext) {
it.next() match {
case name: Name if uniqueIds && tree.hasSymbol && tree.symbol != NoSymbol =>
print(tree.symbol.name, "#", tree.symbol.id)
case arg =>
print(arg)
}
print(if (it.hasNext) ", " else ")")
}
if (typesPrinted)
print(".setType(", tree.tpe, ")")
case arg =>
out.print(arg)
}
}
}
|