summaryrefslogtreecommitdiff
path: root/src/reflect
diff options
context:
space:
mode:
authorVladimirNik <vladimir.nikolaev9@gmail.com>2014-02-16 23:34:03 +0400
committerVladimirNik <vladimir.nikolaev9@gmail.com>2014-02-20 01:23:26 +0400
commitf7425c0e987aa092488b2d5405b64d77995bd712 (patch)
tree497d51c4a99b18e7a2d9009922b82221c153a585 /src/reflect
parent81e7caa3c930987a589ad070022444bc4b163de1 (diff)
downloadscala-f7425c0e987aa092488b2d5405b64d77995bd712.tar.gz
scala-f7425c0e987aa092488b2d5405b64d77995bd712.tar.bz2
scala-f7425c0e987aa092488b2d5405b64d77995bd712.zip
printOwners support added to Printers; whitespaces removed
Diffstat (limited to 'src/reflect')
-rw-r--r--src/reflect/scala/reflect/api/Printers.scala6
-rw-r--r--src/reflect/scala/reflect/internal/Printers.scala49
-rw-r--r--src/reflect/scala/reflect/internal/ReificationSupport.scala2
-rw-r--r--src/reflect/scala/reflect/internal/TreeInfo.scala4
4 files changed, 32 insertions, 29 deletions
diff --git a/src/reflect/scala/reflect/api/Printers.scala b/src/reflect/scala/reflect/api/Printers.scala
index 3591712708..92ae6d8b44 100644
--- a/src/reflect/scala/reflect/api/Printers.scala
+++ b/src/reflect/scala/reflect/api/Printers.scala
@@ -217,15 +217,15 @@ trait Printers { self: Universe =>
*
* @group Printers
*/
- def showCode(tree: Tree, printTypes: BooleanFlag = None, printIds: BooleanFlag = None, printPositions: BooleanFlag = None, printRootPkg: Boolean = false) =
- render(tree, newCodePrinter(_, tree, printRootPkg), printTypes, printIds, None, None, printPositions)
+ def showCode(tree: Tree, printTypes: BooleanFlag = None, printIds: BooleanFlag = None, printOwners: BooleanFlag = None, printPositions: BooleanFlag = None, printRootPkg: Boolean = false) =
+ render(tree, newCodePrinter(_, tree, printRootPkg), printTypes, printIds, printOwners, printKinds = None, printMirrors = None, printPositions)
/**
* Hook to define what `showCode(...)` means.
* @group Printers
*/
protected def newCodePrinter(out: PrintWriter, tree: Tree, printRootPkg: Boolean): TreePrinter
-
+
/** Renders internal structure of a reflection artifact as the
* visualization of a Scala syntax tree.
*
diff --git a/src/reflect/scala/reflect/internal/Printers.scala b/src/reflect/scala/reflect/internal/Printers.scala
index 5aea8354b0..680c19e426 100644
--- a/src/reflect/scala/reflect/internal/Printers.scala
+++ b/src/reflect/scala/reflect/internal/Printers.scala
@@ -292,7 +292,10 @@ trait Printers extends api.Printers { self: SymbolTable =>
print("#" + tree.symbol.id)
}
- if (printOwners && tree.symbol != null) print("@" + tree.symbol.owner.id)
+ if (printOwners && tree.symbol != null)
+ comment{
+ print("@" + tree.symbol.owner.id)
+ }
}
protected def printSuper(tree: Super, resultName: => String, checkSymbol: Boolean = true) = {
@@ -596,13 +599,13 @@ trait Printers extends api.Printers { self: SymbolTable =>
case EmptyTree | build.SyntacticEmptyTypeTree() => true
case _ => false
}
-
- protected def originalTypeTrees(trees: List[Tree]) =
+
+ protected def originalTypeTrees(trees: List[Tree]) =
trees.filter(!emptyTree(_)) map {
case tt: TypeTree => tt.original
case tree => tree
}
-
+
val defaultClasses = List(tpnme.AnyRef)
val defaultTraitsForCase = List(tpnme.Product, tpnme.Serializable)
protected def removeDefaultTypesFromList(trees: List[Tree])(classesToRemove: List[Name] = defaultClasses)(traitsToRemove: List[Name]) = {
@@ -624,21 +627,21 @@ trait Printers extends api.Printers { self: SymbolTable =>
case Select(Ident(sc), name) => !(classesToRemove.contains(name) && sc == nme.scala_)
case _ => true
}
-
+
protected def syntheticToRemove(tree: Tree) =
tree match {
case _: ValDef | _: TypeDef => false // don't remove ValDef and TypeDef
case md: MemberDef if md.mods.isSynthetic => true
case _ => false
- }
+ }
override def printOpt(prefix: String, tree: Tree) =
if (!emptyTree(tree)) super.printOpt(prefix, tree)
-
+
override def printColumn(ts: List[Tree], start: String, sep: String, end: String) = {
super.printColumn(ts.filter(!syntheticToRemove(_)), start, sep, end)
}
-
+
def printFlags(mods: Modifiers, primaryCtorParam: Boolean = false): Unit = {
val base = AccessFlags | OVERRIDE | ABSTRACT | FINAL | SEALED | LAZY
val mask = if (primaryCtorParam) base else base | IMPLICIT
@@ -721,12 +724,12 @@ trait Printers extends api.Printers { self: SymbolTable =>
printTypesInfo(tree)
} finally parentsStack.pop()
}
-
+
def processTreePrinting(tree: Tree): Unit = {
tree match {
// don't remove synthetic ValDef/TypeDef
case _ if syntheticToRemove(tree) =>
-
+
case cl @ ClassDef(mods, name, tparams, impl) =>
if (mods.isJavaDefined) super.printTree(cl)
printAnnotations(cl)
@@ -946,7 +949,7 @@ trait Printers extends api.Printers { self: SymbolTable =>
case Typed(expr, tp) =>
def printTp = print("(", tp, ")")
-
+
tp match {
case EmptyTree | build.SyntacticEmptyTypeTree() => printTp
// case for untypechecked trees
@@ -962,7 +965,7 @@ trait Printers extends api.Printers { self: SymbolTable =>
if (targs.exists(emptyTree(_))) {
print(fun)
} else super.printTree(tree)
-
+
case Apply(fun, vargs) =>
tree match {
// processing methods ending on colons (x \: list)
@@ -987,20 +990,20 @@ trait Printers extends api.Printers { self: SymbolTable =>
case _ => print(fun)
}
printRow(args, "(", ", ", ")")
-
+
case st @ Super(This(qual), mix) =>
printSuper(st, printedName(qual), checkSymbol = false)
case th @ This(qual) =>
if (tree.hasExistingSymbol && tree.symbol.isPackage) print(tree.symbol.fullName)
- else printThis(th, printedName(qual))
-
+ else printThis(th, printedName(qual))
+
// remove this prefix from constructor invocation in typechecked trees: this.this -> this
- case Select(This(_), name @ nme.CONSTRUCTOR) => print(printedName(name))
-
+ case Select(This(_), name @ nme.CONSTRUCTOR) => print(printedName(name))
+
case Select(qual: New, name) =>
print(qual)
-
+
case Select(qual, name) =>
def checkRootPackage(tr: Tree): Boolean =
(currentParent match { //check that Select is not for package def name
@@ -1012,8 +1015,8 @@ trait Printers extends api.Printers { self: SymbolTable =>
tr.hasExistingSymbol && sym.isPackage && sym.name != nme.ROOTPKG
case _ => false
})
-
- if (printRootPkg && checkRootPackage(tree)) print(s"${printedName(nme.ROOTPKG)}.")
+
+ if (printRootPkg && checkRootPackage(tree)) print(s"${printedName(nme.ROOTPKG)}.")
val printParentheses = needsParentheses(qual)(insideAnnotated = false) || isIntLitWithDecodedOp(qual, name)
if (printParentheses) print("(", resolveSelect(qual), ").", printedName(name))
else print(resolveSelect(qual), ".", printedName(name))
@@ -1058,7 +1061,7 @@ trait Printers extends api.Printers { self: SymbolTable =>
case tt: TypeTree =>
if (!emptyTree(tt)) print(tt.original)
-
+
case AppliedTypeTree(tp, args) =>
// it's possible to have (=> String) => String type but Function1[=> String, String] is not correct
val containsByNameTypeParam = args exists treeInfo.isByNameParamType
@@ -1086,14 +1089,14 @@ trait Printers extends api.Printers { self: SymbolTable =>
}
}
}
-
+
/** Hook for extensions */
def xprintTree(treePrinter: TreePrinter, tree: Tree) =
treePrinter.print(tree.productPrefix+tree.productIterator.mkString("(", ", ", ")"))
def newCodePrinter(writer: PrintWriter, tree: Tree, printRootPkg: Boolean): TreePrinter =
new CodePrinter(writer, printRootPkg)
-
+
def newTreePrinter(writer: PrintWriter): TreePrinter = new TreePrinter(writer)
def newTreePrinter(stream: OutputStream): TreePrinter = newTreePrinter(new PrintWriter(stream))
def newTreePrinter(): TreePrinter = newTreePrinter(new PrintWriter(ConsoleWriter))
diff --git a/src/reflect/scala/reflect/internal/ReificationSupport.scala b/src/reflect/scala/reflect/internal/ReificationSupport.scala
index 7ce3f3d7f5..100c4e6c47 100644
--- a/src/reflect/scala/reflect/internal/ReificationSupport.scala
+++ b/src/reflect/scala/reflect/internal/ReificationSupport.scala
@@ -233,7 +233,7 @@ trait ReificationSupport { self: SymbolTable =>
case _ => None
}
}
-
+
// undo gen.mkTemplate
protected object UnMkTemplate {
def unapply(templ: Template): Option[(List[Tree], ValDef, Modifiers, List[List[ValDef]], List[Tree], List[Tree])] = {
diff --git a/src/reflect/scala/reflect/internal/TreeInfo.scala b/src/reflect/scala/reflect/internal/TreeInfo.scala
index b52ff2da04..4dee80afa9 100644
--- a/src/reflect/scala/reflect/internal/TreeInfo.scala
+++ b/src/reflect/scala/reflect/internal/TreeInfo.scala
@@ -453,7 +453,7 @@ abstract class TreeInfo {
val vdRhs = if (vmods.isLazy) lazyValDefRhs(drhs) else vrhs
copyValDef(vd)(mods = vdMods, name = dname, rhs = vdRhs)
} getOrElse (vd)
- // for abstract and some lazy val/vars
+ // for abstract and some lazy val/vars
case dd @ DefDef(mods, name, _, _, tpt, rhs) if mods.hasAccessorFlag =>
// transform getter mods to field
val vdMods = (if (!mods.hasStableFlag) mods | Flags.MUTABLE else mods &~ Flags.STABLE) &~ Flags.ACCESSOR
@@ -465,7 +465,7 @@ abstract class TreeInfo {
recoverBody(filterBody(tbody))
} else tbody
}
-
+
/** The first constructor definitions in `stats` */
def firstConstructor(stats: List[Tree]): Tree = stats find {
case x: DefDef => nme.isConstructorName(x.name)