diff options
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" |