diff options
author | VladimirNik <vladimir.nikolaev9@gmail.com> | 2014-01-07 03:48:43 +0400 |
---|---|---|
committer | VladimirNik <vladimir.nikolaev9@gmail.com> | 2014-01-07 03:48:43 +0400 |
commit | 68ba3efba997593ee24d1d72512ee4120b8fca6b (patch) | |
tree | 5b8a7744b20762f4b4fc79d1d39bae58899effcb /src/reflect/scala/reflect/internal/Printers.scala | |
parent | 2357e5dace20be5c7a2df94a7078b1c3bd4379db (diff) | |
download | scala-68ba3efba997593ee24d1d72512ee4120b8fca6b.tar.gz scala-68ba3efba997593ee24d1d72512ee4120b8fca6b.tar.bz2 scala-68ba3efba997593ee24d1d72512ee4120b8fca6b.zip |
Annotated trees processing is modified
1. Problem with multiple parameter lists in annotations is resolved
2. Tests for Annotated trees are added
Diffstat (limited to 'src/reflect/scala/reflect/internal/Printers.scala')
-rw-r--r-- | src/reflect/scala/reflect/internal/Printers.scala | 39 |
1 files changed, 17 insertions, 22 deletions
diff --git a/src/reflect/scala/reflect/internal/Printers.scala b/src/reflect/scala/reflect/internal/Printers.scala index 8195b41df6..d602c19826 100644 --- a/src/reflect/scala/reflect/internal/Printers.scala +++ b/src/reflect/scala/reflect/internal/Printers.scala @@ -297,19 +297,6 @@ trait Printers extends api.Printers { self: SymbolTable => print("this") } - protected def printAnnotated(tree: Annotated)(printArg: => Unit) { - val Annotated(Apply(Select(New(tpt), nme.CONSTRUCTOR), args), atree) = tree - - def printAnnot() { - print("@", tpt) - if (args.nonEmpty) - printRow(args, "(", ",", ")") - } - printArg - printAnnot() - } - - def printTree(tree: Tree) { tree match { case EmptyTree => @@ -473,7 +460,13 @@ trait Printers extends api.Printers { self: SymbolTable => } case an @ Annotated(Apply(Select(New(tpt), nme.CONSTRUCTOR), args), tree) => - printAnnotated(an)(print(tree, if (tree.isType) " " else ": ")) + def printAnnot() { + print("@", tpt) + if (args.nonEmpty) + printRow(args, "(", ",", ")") + } + print(tree, if (tree.isType) " " else ": ") + printAnnot() case SingletonTypeTree(ref) => print(ref, ".type") @@ -677,7 +670,11 @@ trait Printers extends api.Printers { self: SymbolTable => override def printAnnotations(tree: MemberDef) { val annots = tree.mods.annotations - annots foreach { + annots foreach {annot => printAnnot(annot); print(" ")} + } + + protected def printAnnot(tree: Tree) { + tree match { case treeInfo.Applied(core, _, argss) => print("@") core match { @@ -685,9 +682,8 @@ trait Printers extends api.Printers { self: SymbolTable => case _ => } printArgss(argss) - print(" ") case _ => super.printTree(tree) - } + } } override def printTree(tree: Tree) { @@ -972,11 +968,10 @@ trait Printers extends api.Printers { self: SymbolTable => print(printValue) } - case an @ Annotated(Apply(Select(New(tpt), nme.CONSTRUCTOR), args), tree) => - printAnnotated(an) { - val printParentheses = needsParentheses(tree)() - parenthesize(printParentheses) { print(tree) }; print(if (tree.isType) " " else ": ") - } + case an @ Annotated(ap, tree) => + val printParentheses = needsParentheses(tree)() + parenthesize(printParentheses) { print(tree) }; print(if (tree.isType) " " else ": ") + printAnnot(ap) case SelectFromTypeTree(qualifier, selector) => print("(", qualifier, ")#", blankForOperatorName(selector), printedName(selector)) |