summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
-rw-r--r--test/junit/scala/reflect/internal/PrintersTest.scala310
5 files changed, 187 insertions, 184 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)
diff --git a/test/junit/scala/reflect/internal/PrintersTest.scala b/test/junit/scala/reflect/internal/PrintersTest.scala
index 4c9dfaf038..73c58487a1 100644
--- a/test/junit/scala/reflect/internal/PrintersTest.scala
+++ b/test/junit/scala/reflect/internal/PrintersTest.scala
@@ -23,18 +23,18 @@ class PrintersTest extends BasePrintTests
object PrinterHelper {
val toolbox = cm.mkToolBox()
-
+
import scala.reflect.internal.Chars._
private def normalizeEOL(resultCode: String) =
resultCode.lines mkString s"$LF"
-
+
def assertResultCode(code: String)(parsedCode: String = "", typedCode: String = "", wrap: Boolean = false, printRoot: Boolean = false) = {
def toolboxTree(tree: => Tree) = try{
tree
} catch {
case e:scala.tools.reflect.ToolBoxError => throw new Exception(e.getMessage + ": " + code)
}
-
+
def wrapCode(source: String) = {
val context = sm"""
|trait PrintersContext {
@@ -46,7 +46,7 @@ object PrinterHelper {
| trait B1;
|${source.trim.lines map {" " + _} mkString s"$LF"}
|}"""
-
+
if (wrap) context.trim() else source.trim
}
@@ -58,17 +58,17 @@ object PrinterHelper {
assertEquals("using toolbox typechecker" + LF, wrapCode(typedCode), normalizeEOL(showCode(typedTree, printRootPkg = printRoot)))
}
}
-
+
def assertTreeCode(tree: Tree)(code: String) = {
assertEquals("using quasiquote or given tree"+LF, code.trim, normalizeEOL(showCode(tree)))
}
-
+
def assertPrintedCode(source: String, checkTypedTree: Boolean = true, wrapCode: Boolean = false) = {
if (checkTypedTree)
assertResultCode(source)(source, source, wrapCode)
else assertResultCode(source)(parsedCode = source, wrap = wrapCode)
}
-
+
implicit class StrContextStripMarginOps(val stringContext: StringContext) extends util.StripMarginInterpolator
}
@@ -76,57 +76,57 @@ import PrinterHelper._
trait BasePrintTests {
@Test def testIdent = assertTreeCode(Ident("*"))("*")
-
+
@Test def testConstant1 = assertTreeCode(Literal(Constant("*")))("\"*\"")
-
+
@Test def testConstant2 = assertTreeCode(Literal(Constant(42)))("42")
-
+
@Test def testConstantFloat = assertTreeCode(Literal(Constant(42f)))("42.0F")
-
+
@Test def testConstantDouble = assertTreeCode(Literal(Constant(42d)))("42.0")
-
+
@Test def testConstantLong = assertTreeCode(Literal(Constant(42l)))("42L")
-
+
@Test def testOpExpr = assertPrintedCode("(5).+(4)", checkTypedTree = false)
-
+
@Test def testName1 = assertPrintedCode("class test")
-
+
@Test def testName2 = assertPrintedCode("class *")
-
+
@Test def testName4 = assertPrintedCode("class `a*`")
-
+
@Test def testName5 = assertPrintedCode("val :::: = 1")
-
+
@Test def testName6 = assertPrintedCode("val `::::t` = 1")
-
+
@Test def testName7 = assertPrintedCode("""class \/""")
-
+
@Test def testName8 = assertPrintedCode("""class \\\\""")
-
+
@Test def testName9 = assertPrintedCode("""class test_\/""")
-
+
@Test def testName10 = assertPrintedCode("""class `*_*`""")
-
+
@Test def testName11 = assertPrintedCode("""class `a_*`""")
-
+
@Test def testName12 = assertPrintedCode("""class `*_a`""")
-
+
@Test def testName13 = assertPrintedCode("""class a_a""")
-
+
@Test def testName14 = assertPrintedCode("val x$11 = 5")
-
+
@Test def testName15 = assertPrintedCode("class `[]`")
-
+
@Test def testName16 = assertPrintedCode("class `()`")
-
+
@Test def testName17 = assertPrintedCode("class `{}`")
-
+
@Test def testName18 = assertPrintedCode("class <>")
-
+
@Test def testName19 = assertPrintedCode("""class `class`""")
-
+
@Test def testName20 = assertPrintedCode("""class `test name`""")
-
+
@Test def testIfExpr1 = assertResultCode(code = sm"""
|val a = 1
|if (a > 1)
@@ -147,7 +147,7 @@ trait BasePrintTests {
|else
| ((PrintersContext.this.a.toString()): scala.Predef.String)
""", wrap = true)
-
+
@Test def testIfExpr2 = assertPrintedCode(sm"""
|class A {
| (if (true)
@@ -161,7 +161,7 @@ trait BasePrintTests {
| ()
| }).toString()
|}""")
-
+
@Test def testIfExpr3 = assertPrintedCode(sm"""
|class A {
| (if (true)
@@ -175,13 +175,13 @@ trait BasePrintTests {
| ()
| }).toString().hashCode()
|}""")
-
+
//val x = true && true && false.!
@Test def testBooleanExpr1 = assertPrintedCode("val x = true.&&(true).&&(false.`unary_!`)", checkTypedTree = false)
-
+
//val x = true && !(true && false)
@Test def testBooleanExpr2 = assertPrintedCode("val x = true.&&(true.&&(false).`unary_!`)", checkTypedTree = false)
-
+
@Test def testNewExpr1 = assertResultCode(
code = sm"""
|class foo
@@ -195,7 +195,7 @@ trait BasePrintTests {
|new PrintersContext.this.foo()
|""",
wrap = true)
-
+
@Test def testNewExpr2 = assertResultCode(
code = sm"""
|class foo
@@ -218,27 +218,27 @@ trait BasePrintTests {
| new $$anon()
|}""",
wrap = true)
-
+
@Test def testNewExpr3 = assertPrintedCode(sm"""
|{
| class foo[t];
| new foo[scala.Int]()
|}""")
-
+
@Test def testNewExpr4 = assertPrintedCode(sm"""
|{
| class foo(x: scala.Int);
| val x = 5;
| new foo(x)
|}""")
-
+
@Test def testNewExpr5 = assertPrintedCode(sm"""
|{
| class foo[t](x: scala.Int);
| val x = 5;
| new foo[scala.Predef.String](x)
|}""")
-
+
//new foo[t](x) { () }
@Test def testNewExpr6 = assertResultCode(
code = sm"""
@@ -265,7 +265,7 @@ trait BasePrintTests {
| new $$anon()
| }
|}""")
-
+
//new foo with bar
@Test def testNewExpr7 = assertPrintedCode(sm"""
|{
@@ -276,7 +276,7 @@ trait BasePrintTests {
| new $$anon()
| }
|}""")
-
+
//new { anonymous }
@Test def testNewExpr8 = assertPrintedCode(sm"""
|{
@@ -285,7 +285,7 @@ trait BasePrintTests {
| };
| new $$anon()
|}""")
-
+
//new { val early = 1 } with Parent[Int] { body }
@Test def testNewExpr9 = assertPrintedCode(sm"""
|{
@@ -299,7 +299,7 @@ trait BasePrintTests {
| new $$anon()
| }
|}""")
-
+
//new Foo { self => }
@Test def testNewExpr10 = assertPrintedCode(sm"""
|{
@@ -311,9 +311,9 @@ trait BasePrintTests {
| new $$anon()
| }
|}""")
-
+
@Test def testReturn = assertPrintedCode("def test: scala.Int = return 42")
-
+
@Test def testFunc1 = assertResultCode(
code = "List(1, 2, 3).map((i: Int) => i - 1)")(
parsedCode = "List(1, 2, 3).map(((i: Int) => i.-(1)))",
@@ -323,44 +323,44 @@ trait BasePrintTests {
code = "val sum: Seq[Int] => Int = _ reduceLeft (_+_)")(
parsedCode = "val sum: _root_.scala.Function1[Seq[Int], Int] = ((x$1) => x$1.reduceLeft(((x$2, x$3) => x$2.+(x$3))))",
typedCode = "val sum: _root_.scala.Function1[scala.`package`.Seq[scala.Int], scala.Int] = ((x$1) => x$1.reduceLeft(((x$2, x$3) => x$2.+(x$3))))")
-
+
@Test def testFunc3 = assertResultCode(
code = "List(1, 2, 3) map (_ - 1)")(
parsedCode = "List(1, 2, 3).map(((x$1) => x$1.-(1))) ",
typedCode = "scala.collection.immutable.List.apply(1, 2, 3).map(((x$1) => x$1.-(1)))(scala.collection.immutable.List.canBuildFrom)")
-
+
@Test def testFunc4 = assertResultCode(
code = "val x: String => Int = ((str: String) => 1)")(
parsedCode = "val x: _root_.scala.Function1[String, Int] = ((str: String) => 1)",
typedCode = " val x: _root_.scala.Function1[_root_.scala.Predef.String, _root_.scala.Int] = ((str: _root_.scala.Predef.String) => 1)", printRoot = true)
-
+
@Test def testImport1 = assertPrintedCode("import scala.collection.mutable")
-
+
@Test def testImport2 = assertPrintedCode("import java.lang.{String=>Str}")
-
+
@Test def testImport3 = assertPrintedCode("import java.lang.{String=>Str, Object=>_, _}")
-
+
@Test def testImport4 = assertPrintedCode("import scala.collection._")
}
trait ClassPrintTests {
@Test def testClass = assertPrintedCode("class *")
-
+
@Test def testClassWithBody = assertPrintedCode(sm"""
|class X {
| def y = "test"
|}""")
@Test def testClassWithPublicParams = assertPrintedCode("class X(val x: scala.Int, val s: scala.Predef.String)")
-
+
@Test def testClassWithParams1 = assertPrintedCode("class X(x: scala.Int, s: scala.Predef.String)")
-
+
@Test def testClassWithParams2 = assertPrintedCode("class X(@test x: Int, s: String)", checkTypedTree = false)
-
+
@Test def testClassWithParams3 = assertPrintedCode("class X(implicit x: Int, s: String)", checkTypedTree = false)
-
+
@Test def testClassWithParams4 = assertPrintedCode("class X(implicit @unchecked x: Int, s: String)", checkTypedTree = false)
-
+
@Test def testClassWithParams5 = assertPrintedCode(sm"""
|{
| class Y {
@@ -369,25 +369,25 @@ trait ClassPrintTests {
| class X(override private[this] val x: scala.Int, s: scala.Predef.String) extends Y;
| ()
|}""")
-
+
@Test def testClassWithParams6 = assertPrintedCode("class X(@test1 override private[this] val x: Int, @test2(param1 = 7) s: String) extends Y", checkTypedTree = false)
-
+
@Test def testClassWithParams7 = assertPrintedCode("class X protected (val x: scala.Int, val s: scala.Predef.String)")
-
+
@Test def testClassWithParams8 = assertPrintedCode("class X(var x: scala.Int)")
-
+
@Test def testClassWithParams9 = assertPrintedCode("def test(x: scala.Int*) = 5")
-
+
@Test def testClassWithByNameParam = assertPrintedCode("class X(x: => scala.Int)")
-
+
@Test def testClassWithDefault = assertPrintedCode(sm"""
|{
| class X(var x: scala.Int = 5);
| ()
|}""")
-
+
@Test def testClassWithParams10 = assertPrintedCode("class X(protected[zzz] var x: Int)", checkTypedTree = false)
-
+
@Test def testClassWithParams11 = assertPrintedCode(sm"""
|{
| class F(x: scala.Int);
@@ -397,11 +397,11 @@ trait ClassPrintTests {
| class X(override var x: scala.Int = 5) extends F(x) with E;
| ()
|}""")
-
+
@Test def testClassWithParams12 = assertPrintedCode("class X(val y: scala.Int)()(var z: scala.Double)")
-
+
@Test def testClassWithImplicitParams = assertPrintedCode("class X(var i: scala.Int)(implicit val d: scala.Double, var f: scala.Float)")
-
+
@Test def testClassWithEarly = assertPrintedCode(sm"""
|class X(var i: scala.Int) extends {
| val a = i;
@@ -412,14 +412,14 @@ trait ClassPrintTests {
|class Throw1 {
| throw new scala.`package`.Exception("exception!")
|}""")
-
+
@Test def testClassWithThrow2 = assertPrintedCode(sm"""
|class Throw2 {
| var msg = " ";
| val e = new scala.`package`.Exception(Throw2.this.msg);
| throw Throw2.this.e
|}""")
-
+
/*
class Test {
val (a, b) = (1, 2)
@@ -433,7 +433,7 @@ trait ClassPrintTests {
| val a = Test.this.x$$1._1;
| val b = Test.this.x$$1._2
|}""")
-
+
@Test def testClassWithAssignmentWithTuple2 = assertResultCode(
code = sm"""
|class Test {
@@ -455,7 +455,7 @@ trait ClassPrintTests {
| val a = Test.this.x$$1._1;
| val b = Test.this.x$$1._2
|}""")
-
+
/*
class Test {
val List(one, three, five) = List(1,3,5)
@@ -476,12 +476,12 @@ trait ClassPrintTests {
|class Test(l: (scala.`package`.List[_$$1] forSome {
| type _$$1
|}))""")
-
+
@Test def testClassWithExistentialParameter2 = assertPrintedCode(sm"""
|class B(l: (scala.`package`.List[T] forSome {
| type T
|}))""")
-
+
@Test def testClassWithCompoundTypeTree = assertPrintedCode(sm"""
|{
| trait A;
@@ -493,7 +493,7 @@ trait ClassPrintTests {
| };
| ()
|}""")
-
+
@Test def testClassWithSelectFromTypeTree = assertPrintedCode(sm"""
|{
| trait A {
@@ -502,34 +502,34 @@ trait ClassPrintTests {
| class B(t: (A)#T);
| ()
|}""")
-
+
@Test def testImplicitClass = assertPrintedCode(sm"""
|{
| implicit class X(protected[this] var x: scala.Int);
| ()
|}""",
checkTypedTree = true)
-
+
@Test def testAbstractClass = assertPrintedCode("abstract class X(protected[this] var x: scala.Int)")
-
+
@Test def testCaseClassWithParams1 = assertPrintedCode(sm"""
|{
| case class X(x: scala.Int, s: scala.Predef.String);
| ()
|}""")
-
+
@Test def testCaseClassWithParams2 = assertPrintedCode(sm"""
|{
| case class X(protected val x: scala.Int, s: scala.Predef.String);
| ()
|}""")
-
+
@Test def testCaseClassWithParams3 = assertPrintedCode(sm"""
|{
| case class X(implicit x: scala.Int, s: scala.Predef.String);
| ()
|}""")
-
+
@Test def testCaseClassWithParams4 = assertPrintedCode(sm"""
|{
| trait V {
@@ -538,7 +538,7 @@ trait ClassPrintTests {
| case class X(override val x: scala.Int, s: scala.Predef.String) extends scala.Cloneable;
| ()
|}""")
-
+
@Test def testCaseClassWithBody = assertPrintedCode(sm"""
|{
| case class X() {
@@ -580,7 +580,7 @@ trait ClassPrintTests {
| };
| ()
|}""")
-
+
@Test def testThisInClass = assertPrintedCode(sm"""
|class Outer {
| class Inner {
@@ -588,7 +588,7 @@ trait ClassPrintTests {
| };
| val self = this
|}""")
-
+
@Test def testCaseClassWithParamsAndBody = assertPrintedCode(sm"""
|{
| case class X(var x: scala.Int, var s: scala.Predef.String) {
@@ -598,7 +598,7 @@ trait ClassPrintTests {
|}""")
@Test def testObject = assertPrintedCode("object *")
-
+
@Test def testObjectWithBody = assertPrintedCode(sm"""
|object X {
| def y = "test"
@@ -608,7 +608,7 @@ trait ClassPrintTests {
|object X extends {
| val early: scala.Int = 42
|} with scala.Serializable""")
-
+
@Test def testObjectWithEarly2 = assertPrintedCode(sm"""
|object X extends {
| val early: scala.Int = 42;
@@ -624,14 +624,14 @@ trait ClassPrintTests {
|trait Y {
| private[Y] object X extends scala.Serializable with scala.Cloneable
|}""")
-
+
@Test def testObjectWithPatternMatch1 = assertPrintedCode(sm"""
|object PM1 {
| scala.collection.immutable.List.apply(1, 2) match {
| case (i @ _) => i
| }
|}""")
-
+
@Test def testObjectWithPatternMatch2 = assertResultCode(
code = sm"""
|object PM2 {
@@ -652,9 +652,9 @@ trait ClassPrintTests {
| case (i @ _) if i.>(5) => i
| }))(scala.collection.immutable.List.canBuildFrom)
|}""")
- *
+ *
*/
-
+
@Test def testObjectWithPatternMatch3 = assertResultCode(
code = sm"""
|object PM3 {
@@ -675,9 +675,9 @@ trait ClassPrintTests {
| case (i @ ((_): scala.Int)) => i
| }))(scala.collection.immutable.List.canBuildFrom)
|}""")
- *
+ *
*/
-
+
@Test def testObjectWithPatternMatch4 = assertResultCode(
code = sm"""
|object PM4 {
@@ -698,9 +698,9 @@ trait ClassPrintTests {
| case _ => 42
| }))(scala.collection.immutable.List.canBuildFrom)
|}""")
- *
+ *
*/
-
+
@Test def testObjectWithPatternMatch5 = assertResultCode(
code = sm"""
|object PM5 {
@@ -720,7 +720,7 @@ trait ClassPrintTests {
| case scala.`package`.::((x @ _), (xs @ _)) => x
| }
|}""")
-
+
@Test def testObjectWithPatternMatch6 = assertResultCode(
code = sm"""
|object PM6 {
@@ -744,16 +744,16 @@ trait ClassPrintTests {
| case _ => false
| }))(scala.collection.immutable.List.canBuildFrom)
|}"""
- *
+ *
*/
-
+
@Test def testObjectWithPatternMatch7 = assertPrintedCode(sm"""
|object PM7 {
| scala.Predef.augmentString("abcde").toList match {
| case scala.collection.Seq((car @ _), _*) => car
| }
|}""")
-
+
@Test def testObjectWithPatternMatch8 = assertPrintedCode(sm"""
|{
| object Extractor {
@@ -766,7 +766,7 @@ trait ClassPrintTests {
| };
| ()
|}""")
-
+
@Test def testObjectWithPartialFunc = assertPrintedCode(sm"""
|object Test {
| def partFuncTest[A, B](e: scala.`package`.Either[A, B]): scala.Unit = e match {
@@ -815,7 +815,7 @@ trait ClassPrintTests {
trait TraitPrintTests {
@Test def testTrait = assertPrintedCode("trait *")
-
+
@Test def testTraitWithBody = assertPrintedCode(sm"""
|trait X {
| def y = "test"
@@ -830,7 +830,7 @@ trait TraitPrintTests {
|trait X { self =>
| def y = "test"
|}""")
-
+
@Test def testTraitWithSelf2 = assertPrintedCode(sm"""
|trait X { self: scala.Cloneable with scala.Serializable =>
| val x: scala.Int = 1
@@ -843,7 +843,7 @@ trait TraitPrintTests {
| def foo: scala.Unit;
| val bar: scala.Predef.String
|}""")
-
+
@Test def testTraitWithInh = assertPrintedCode("trait X extends scala.Cloneable with scala.Serializable")
@Test def testTraitWithEarly1 = assertPrintedCode(sm"""
@@ -856,7 +856,7 @@ trait TraitPrintTests {
| val x: scala.Int = 0;
| type Foo = scala.Unit
|} with scala.Cloneable""")
-
+
@Test def testTraitWithEarly3 = assertPrintedCode(sm"""
|trait X extends {
| val x: scala.Int = 5;
@@ -864,7 +864,7 @@ trait TraitPrintTests {
| type Foo;
| type XString = scala.Predef.String
|} with scala.Serializable""")
-
+
@Test def testTraitWithEarly4 = assertPrintedCode(sm"""
|trait X extends {
| val x: scala.Int = 5;
@@ -874,24 +874,24 @@ trait TraitPrintTests {
|} with scala.Serializable {
| val z = 7
|}""")
-
+
@Test def testTraitWithSingletonTypeTree = assertPrintedCode(sm"""
|trait Test {
| def testReturnSingleton(): Test.this.type
|}""")
-
+
@Test def testTraitWithThis = assertTreeCode(q"trait Test { this: X with Y => }")(sm"""
|trait Test { _ : X with Y =>
|
|}""")
-
+
@Test def testTraitWithWhile1 = assertPrintedCode(sm"""
|trait Test {
| while (false)
| scala.Predef.println("testing...")
|
|}""")
-
+
@Test def testTraitWithWhile2 = assertPrintedCode(sm"""
|trait Test {
| while (true)
@@ -901,14 +901,14 @@ trait TraitPrintTests {
| }
|
|}""")
-
+
@Test def testTraitWithDoWhile1 = assertPrintedCode(sm"""
|trait Test {
| do
| scala.Predef.println("testing...")
| while (true)
|}""")
-
+
@Test def testTraitWithTypes = assertResultCode(
code = sm"""
|trait Test {
@@ -935,23 +935,23 @@ trait TraitPrintTests {
trait ValAndDefPrintTests {
@Test def testVal1 = assertPrintedCode("val a: scala.Unit = ()")
-
+
@Test def testVal2 = assertPrintedCode("val * : scala.Unit = ()")
-
+
@Test def testVal3 = assertPrintedCode("val a_ : scala.Unit = ()")
-
+
@Test def testDef1 = assertPrintedCode("def a = ()")
-
+
@Test def testDef2 = assertPrintedCode("def * : scala.Unit = ()")
-
+
@Test def testDef3 = assertPrintedCode("def a_(x: scala.Int): scala.Unit = ()")
-
+
@Test def testDef4 = assertPrintedCode("def a_ : scala.Unit = ()")
-
+
@Test def testDef5 = assertPrintedCode("def a_(* : scala.Int): scala.Unit = ()")
-
+
@Test def testDef6 = assertPrintedCode("def a_(b_ : scala.Int) = ()")
-
+
@Test def testDef7 = assertTreeCode{
Block(
DefDef(NoMods, newTermName("test1"), Nil, Nil, EmptyTree, Literal(Constant(()))),
@@ -962,20 +962,20 @@ trait ValAndDefPrintTests {
| def test1 = ();
| def test2() = ()
|}""")
-
+
@Test def testDef8 = {
val arg = ValDef(Modifiers(Flag.IMPLICIT) , newTermName("a"),
AppliedTypeTree(Ident(newTypeName("R")), List(Ident(newTypeName("X")))), EmptyTree)
-
- //def m[X](implicit a: R[X]) = ()
+
+ //def m[X](implicit a: R[X]) = ()
val tree = DefDef(NoMods, newTermName("test"), TypeDef(NoMods, newTypeName("X"), Nil, EmptyTree) :: Nil,
List(List(arg)), EmptyTree, Literal(Constant(())))
assertTreeCode(tree)("def test[X](implicit a: R[X]) = ()")
}
-
+
@Test def testDef9 = assertPrintedCode("def a(x: scala.Int)(implicit z: scala.Double, y: scala.Float): scala.Unit = ()")
-
+
@Test def testDefWithLazyVal1 = assertResultCode(
code = "def a = { lazy val test: Int = 42 }")(
parsedCode = sm"""
@@ -989,7 +989,7 @@ trait ValAndDefPrintTests {
| lazy val test: scala.Int = 42;
| ()
|}""")
-
+
@Test def testDefWithLazyVal2 = assertPrintedCode(sm"""
|def a = {
| lazy val test = {
@@ -998,63 +998,63 @@ trait ValAndDefPrintTests {
| };
| ()
|}""")
-
+
@Test def testDefWithParams1 = assertPrintedCode("def foo(x: scala.Int*) = ()")
-
+
@Test def testDefWithParams2 = assertPrintedCode(sm"""
|{
| def foo(x: scala.Int)(y: scala.Int = 1) = ();
| ()
|}""")
-
+
@Test def testDefWithTypeParams1 = assertPrintedCode(sm"""
|{
| def foo[A, B, C](x: A)(y: scala.Int = 1): C = ().asInstanceOf[C];
| ()
|}""")
-
+
@Test def testDefWithTypeParams2 = assertPrintedCode("def foo[A, B <: scala.AnyVal] = ()")
@Test def testDefWithAnn1 = assertPrintedCode("@annot def foo = null", checkTypedTree = false)
-
+
@Test def testDefWithAnn2 = assertPrintedCode("@a(x) def foo = null", checkTypedTree = false)
@Test def testDefWithAnn3 = assertPrintedCode("@Foo[A, B] def foo = null", checkTypedTree = false)
-
+
@Test def testDefWithAnn4 = assertPrintedCode("@Foo(a)(b)(x, y) def foo = null", checkTypedTree = false)
-
+
@Test def testDefWithAnn5 = assertPrintedCode("@Foo[A, B](a)(b) @Bar def foo(x: Int) = null", checkTypedTree = false)
-
+
@Test def testDefWithAnn6 = assertPrintedCode("@test1(new test2()) def foo = 42", checkTypedTree = false)
-
+
@Test def testDefWithAnn7 = assertPrintedCode("@`t*` def foo = 42", checkTypedTree = false)
-
+
@Test def testDefWithAnn8 = assertPrintedCode("@throws(classOf[Exception]) def foo = throw new Exception()", checkTypedTree = false)
-
+
@Test def testAnnotated1 = assertResultCode(
code = "def foo = 42: @baz")(
parsedCode = "def foo = 42: @baz",
typedCode = "def foo = (42: @baz)",
wrap = true)
-
+
@Test def testAnnotated2 = assertResultCode(
code = "def foo = 42: @foo2[A1, B1](4)(2)")(
parsedCode = "def foo = 42: @foo2[A1, B1](4)(2)",
typedCode = "def foo = (42: @foo2[A1, B1](4)(2))",
wrap = true)
-
+
@Test def testAnnotated3 = assertResultCode(
code = "def foo = (42: @foo1[A1, B1]): @foo2[A1, B1](4)(2)")(
parsedCode = "def foo = (42: @foo1[A1, B1]): @foo2[A1, B1](4)(2)",
typedCode = "def foo = ((42: @foo1[A1, B1]): @foo2[A1, B1](4)(2))",
wrap = true)
-
+
@Test def testAnnotated4 = assertResultCode(
code = "def foo = 42: @foo3[A1, B1](4)(2.0F, new foo1[A1, B1]())")(
parsedCode = "def foo = 42: @foo3[A1, B1](4)(2.0F, new foo1[A1, B1]())",
typedCode = "def foo = (42: @foo3[A1, B1](4)(2.0F, new foo1[A1, B1]()))",
wrap = true)
-
+
@Test def testAnnotated5 = assertPrintedCode(sm"""
|{
| val x = 5;
@@ -1063,7 +1063,7 @@ trait ValAndDefPrintTests {
| case _ => false
| }
|}""")
-
+
@Test def testAnnotated8 = assertPrintedCode(sm"""
|{
| val x = 5;
@@ -1078,7 +1078,7 @@ trait PackagePrintTests {
|package foo.bar {
|
|}""", checkTypedTree = false)
-
+
@Test def testPackage2 = assertPrintedCode(sm"""
|package foo {
| class C
@@ -1111,23 +1111,23 @@ trait PackagePrintTests {
|}""", checkTypedTree = false)
}
-trait QuasiTreesPrintTests {
+trait QuasiTreesPrintTests {
@Test def testQuasiIdent = assertTreeCode(q"*")("*")
-
+
@Test def testQuasiVal = assertTreeCode(q"val * : Unit = null")("val * : Unit = null")
-
+
@Test def testQuasiDef = assertTreeCode(q"def * : Unit = null")("def * : Unit = null")
-
+
@Test def testQuasiTrait = assertTreeCode(q"trait *")("trait *")
-
+
@Test def testQuasiClass = assertTreeCode(q"class *")("class *")
-
+
@Test def testQuasiClassWithPublicParams = assertTreeCode(q"class X(val x: Int, val s:String)")("class X(val x: Int, val s: String)")
-
+
@Test def testQuasiClassWithParams = assertTreeCode(q"class X(x: Int, s:String)")("class X(x: Int, s: String)")
-
+
@Test def testQuasiObject = assertTreeCode(q"object *")("object *")
-
+
@Test def testQuasiObjectWithBody = assertTreeCode(q"""object X{ def y = "test" }""")(sm"""
|object X {
| def y = "test"