Changeset ca52f554a13ca631512f929d8a0e10ab0cb65831
Commiter: Mirko Stocker
Author: Mirko Stocker
Parent: 28048e468f
(2012/01/19 08:36) About 1 month ago
Fix compilation errors on 2.10 related to Names.
Commiter: Mirko Stocker
Author: Mirko Stocker
Parent: 28048e468f
(2012/01/19 08:36) About 1 month ago
Fix compilation errors on 2.10 related to Names.
def escapeScalaKeywordsForImport(n: String) = {def escapeScalaKeywordsForImport(n: String) = {if(global.nme.keywords.contains(n.toTermName) && n.toTermName != nme.USCOREkw) "`"+ n +"`" else nval name = newTermName(n)if(global.nme.keywords.contains(name) && name != nme.USCOREkw) "`"+ n +"`" else nobject NameTree {def apply(name: String) = new NameTree(newTermName(name))}val privateField = selectedValue copy (mods = privateFieldMods, name = privateName)val privateField = selectedValue copy (mods = privateFieldMods, name = newTermName(privateName))name = publicName,name = newTermName(publicName),name = publicName +"_=",name = newTermName(publicName +"_="),vparamss = List(List(ValDef(Modifiers(Flags.PARAM), publicName, TypeTree(selectedValue.tpt.tpe), EmptyTree))),vparamss = List(List(ValDef(Modifiers(Flags.PARAM), newTermName(publicName), TypeTree(selectedValue.tpt.tpe), EmptyTree))),def mkRenamedSymTree(t: SymTree, name: String): SymTree = (t match {def mkRenamedSymTree(t: SymTree, nameString: String): SymTree = {case i: Ident => i.copy(name = name)val name = newTermName(nameString)case v: ValDef => v.copy(name = name)t match {case d: DefDef => d.copy(name = name)case i: Ident => i.copy(name = name)case b: Bind => b.copy(name = name)case v: ValDef => v.copy(name = name)case s: Select => s.copy(name = name)case d: DefDef => d.copy(name = name)case c: ClassDef => c.copy(name = name.toTypeName)case b: Bind => b.copy(name = name)case t: This => t.copy(qual = name.toTypeName)case s: Select => s.copy(name = name)case m: ModuleDef => m.copy(name = name)case c: ClassDef => c.copy(name = name.toTypeName)case t: TypeDef => t.copy(name = name.toTypeName)case t: This => t.copy(qual = name.toTypeName)case t: PackageDef => t.copy(pid = Ident(name) setPos t.pid.pos)case m: ModuleDef => m.copy(name = name)case t => throw new Exception("Found " + t.getClass.getName)case t: TypeDef => t.copy(name = name.toTypeName)}) setPos t.poscase t: PackageDef => t.copy(pid = Ident(name) setPos t.pid.pos)case t => throw new Exception("Found " + t.getClass.getName)}} setPos t.posdef mkRenamedTypeTree(t: TypeTree, name: String, originalSymbol: Symbol) = {def mkRenamedTypeTree(t: TypeTree, name: String, originalSymbol: Symbol) = {val newType = t.tpe map {val newType = t.tpe map {def mkImportFromStrings(qualifier: String, name: String) = {def mkImportFromStrings(qualifier: String, name: String) = {def mapPackageNames(qualifier: String) = {def mapPackageNames(qualifier: String) = {qualifier.split("\\.").map(s => escapeScalaKeywordsForImport(s.toTermName)).mkString(".")newTermName(qualifier.split("\\.").map(s => escapeScalaKeywordsForImport(newTermName(s))).mkString("."))new Import(Ident(mapPackageNames(qualifier)), new ImportSelector(name, -1, name, -1) :: Nil)new Import(Ident(mapPackageNames(qualifier)), new ImportSelector(newTermName(name), -1, newTermName(name), -1) :: Nil)def mkValDef(name: String, rhs: Tree): ValDef = {def mkValDef(name: String, rhs: Tree): ValDef = {val valDef = ValDef(NoMods, name, new TypeTree, rhs)val valDef = ValDef(NoMods, newTermName(name), new TypeTree, rhs)def valDefForFunction = ValDef(NoMods, name, new TypeTree, Apply(rhs, Ident(nme.USCOREkw) :: Nil))def valDefForFunction = ValDef(NoMods, newTermName(name), new TypeTree, Apply(rhs, Ident(nme.USCOREkw) :: Nil))rhs match {rhs match {case xs => "(" + (xs map (_.name) mkString ", ") + ")"case xs => "(" + (xs map (_.name) mkString ", ") + ")"ValDef(NoMods, valName, new TypeTree(), call)ValDef(NoMods, newTermName(valName), new TypeTree(), call)parameters map (_ map (s => new ValDef(Modifiers(Flags.PARAM), s.nameString, TypeTree(s.tpe), EmptyTree)))parameters map (_ map (s => new ValDef(Modifiers(Flags.PARAM), newTermName(s.nameString), TypeTree(s.tpe), EmptyTree)))DefDef(mods withPosition (Flags.METHOD, NoPosition), name, Nil /*type parameters*/ , formalParameters, TypeTree(body.last.tpe), mkBlock(body))DefDef(mods withPosition (Flags.METHOD, NoPosition), newTermName(name), Nil /*type parameters*/ , formalParameters, TypeTree(body.last.tpe), mkBlock(body))def mkBlock(trees: List[Tree]): Block = trees match {def mkBlock(trees: List[Tree]): Block = trees match {val constructorArguments = argss map (_ map {val constructorArguments = argss map (_ map {ValDef(mods | Flags.PARAMACCESSOR, name, tpe, EmptyTree)ValDef(mods | Flags.PARAMACCESSOR, newTermName(name), tpe, EmptyTree)val constructor = {val constructor = {DefDef(mods withPosition (Flags.METHOD, NoPosition), nme.CONSTRUCTOR.toString, Nil, constructorArguments, TypeTree(NoType), mkBlock(body))name.toTypeName,newTypeName(name),Some(Import(newExpr, List(new ImportSelector(if(typeName == name.toString) name else typeName, -1, name, -1))))Some(Import(newExpr, List(new ImportSelector(if(typeName == name.toString) name else newTypeName(typeName), -1, name, -1))))def referenceFromInside = markOccurrences("""def referenceFromInside = markOccurrences("""class /*(*/Foo/*)*/ {class /*(*/Foo/*)*/ {class Bar {class Bar {class /*(*/###/*)*/ {class /*(*/###/*)*/ {class Bar {class Bar {def moveManyClassesAdaptReferences = new FileSet {def moveManyClassesAdaptReferences = new FileSet {trait Aatrait Bbtrait Cctrait Aatrait Bbtrait Ccclass User(what: ToMove) extends A with Bclass User(what: ToMove) extends Aa with Bbimport x.y.Aaimport x.y.Bbclass User(what: ToMove) extends A with Bclass User(what: ToMove) extends Aa with Bbimport a.b.c.Ccclass X extends C with a.b.c.Bclass X extends Cc with a.b.c.Bbimport x.y.Ccclass X extends C with x.y.Bclass X extends Cc with x.y.Bb} applyRefactoring(moveTo("x.y"))} applyRefactoring(moveTo("x.y"))def renameReferenceToOuterclass = new FileSet {def renameReferenceToOuterclass = new FileSet {class /*(*/Foo/*)*/ {class /*(*/Foo/*)*/ {class Bar {class Bar {class /*(*/Blubb/*)*/ {class /*(*/Blubb/*)*/ {class Bar {class Bar {def renameClassExplicitSelfTypeAnnotation= new FileSet {def renameClassExplicitSelfTypeAnnotation= new FileSet {class /*(*/Foo/*)*/ {class /*(*/Foo/*)*/ {class /*(*/Babar/*)*/ {class /*(*/Babar/*)*/ {val defdef = mkDefDef(name = "member", body = List(Ident("()")))val defdef = mkDefDef(name = "member", body = List(Ident(newTermName("()"))))val transformedAst = topdown {val transformedAst = topdown {matchingChildren {matchingChildren {val defdef = mkDefDef(name = "member", body = List(Ident("()")))val defdef = mkDefDef(name = "member", body = List(Ident(newTermName("()"))))val transformedAst = topdown {val transformedAst = topdown {matchingChildren {matchingChildren {parents = Ident("A") :: Ident("B") :: Nil,parents = Ident(newTermName("A")) :: Ident(newTermName("B")) :: Nil,Apply(Select(New(Ident("$anon")), nme.CONSTRUCTOR), Nil)Apply(Select(New(Ident(newTermName("$anon"))), nme.CONSTRUCTOR), Nil)case _ => Assert.fail(); Predef.error("") // too bad fail does not return Nothingcase _ => Assert.fail(); Predef.error("") // too bad fail does not return Nothingval newRHS1 = Apply(Select(Ident("com"),"synchronized"), List(shallowDuplicate(originalDefDef.rhs) setPos NoPosition))val newRHS1 = Apply(Select(Ident(newTermName("com")),newTermName("synchronized")), List(shallowDuplicate(originalDefDef.rhs) setPos NoPosition))assertEquals("""assertEquals("""val newRHS2 = Apply(Select(Ident("com"),"synchronized"), List(originalDefDef.rhs))val newRHS2 = Apply(Select(Ident(newTermName("com")), newTermName("synchronized")), List(originalDefDef.rhs))case _ => Assert.fail(); Predef.error("") // too bad fail does not return Nothingcase _ => Assert.fail(); Predef.error("") // too bad fail does not return Nothingval newRHS1 = new Block(List(Apply(Select(Ident("com"),"synchronized"), List(originalDefDef.rhs))), EmptyTree)val newRHS1 = new Block(List(Apply(Select(Ident(newTermName("com")),newTermName("synchronized")), List(originalDefDef.rhs))), EmptyTree)transform {transform {name = a.fun.symbol.nameString,name = newTermName(a.fun.symbol.nameString),transform {transform {name = a.fun.symbol.nameString,name = newTermName(a.fun.symbol.nameString),name = a.fun.symbol.nameString,name = newTermName(a.fun.symbol.nameString),name = a.fun.symbol.nameString,name = newTermName(a.fun.symbol.nameString),name = a.fun.symbol.nameString,name = newTermName(a.fun.symbol.nameString),def mkPattern(varName: String, className: String, guard: Tree, rhs: Tree): CaseDef = {def mkPattern(varName: String, className: String, guard: Tree, rhs: Tree): CaseDef = {CaseDef(Bind("t",CaseDef(Bind(newTermName("t"),if (className != "") Typed(Ident(""), Ident(className))if (className != "") Typed(Ident(newTermName("")), Ident(newTermName(className)))def mkPattern(varName: String, className: String, guard: Tree, rhs: Tree): CaseDef = {def mkPattern(varName: String, className: String, guard: Tree, rhs: Tree): CaseDef = {CaseDef(Bind("t",CaseDef(Bind(newTermName("t"),if (className != "") Typed(Ident(""), Ident(className))if (className != "") Typed(Ident(newTermName("")), Ident(newTermName(className)))val caseDef = mkPattern("", "ASD", EmptyTree, rhs.copy())val caseDef = mkPattern("", "ASD", EmptyTree, rhs.copy())val matchx = Match(Ident("x"), List(caseDef))val matchx = Match(Ident(newTermName("x")), List(caseDef))def mkPattern(varName: String, className: String, guard: Tree, rhs: Tree): CaseDef = {def mkPattern(varName: String, className: String, guard: Tree, rhs: Tree): CaseDef = {CaseDef(Bind("t",CaseDef(Bind(newTermName("t"),if (className != "") Typed(Ident(""), Ident(className))if (className != "") Typed(Ident(newTermName("")), Ident(newTermName(className)))val caseDef = mkPattern("", "Until", EmptyTree, rhs.copy())val caseDef = mkPattern("", "Until", EmptyTree, rhs.copy())val matchx = Match(Ident("obj"), List(caseDef))val matchx = Match(Ident(newTermName("obj")), List(caseDef))def mkPattern(varName: String, className: String, guard: Tree, rhs: Tree): CaseDef = {def mkPattern(varName: String, className: String, guard: Tree, rhs: Tree): CaseDef = {CaseDef(Bind("t",CaseDef(Bind(newTermName("t"),if (className != "") Typed(Ident(""), Ident(className))if (className != "") Typed(Ident(newTermName("")), Ident(newTermName(className)))val caseDef = mkPattern("", "Abstractionmv", EmptyTree, rhs.copy())val caseDef = mkPattern("", "Abstractionmv", EmptyTree, rhs.copy())val matchx = Match(Ident("obj"), List(caseDef))val matchx = Match(Ident(newTermName("obj")), List(caseDef))name = a.fun.symbol.nameString,name = newTermName(a.fun.symbol.nameString),name = a.fun.symbol.nameString,name = newTermName(a.fun.symbol.nameString),val method = DocDef(DocComment(doc, NoPosition),mkDefDef(name = "meth", body = DocDef(DocComment("/** Kuuka */", NoPosition), EmptyTree) :: Ident("()") :: Nil))val method = DocDef(DocComment(doc, NoPosition),mkDefDef(name = "meth", body = DocDef(DocComment("/** Kuuka */", NoPosition), EmptyTree) :: Ident(newTermName("()")) :: Nil))def testCaseClassTwoArgLists() {def testCaseClassTwoArgLists() {val argsList1 = (NoMods, "r1", Ident("Rate")) :: Nilval argsList1 = (NoMods, "r1", Ident(newTermName("Rate"))) :: Nilval argsList2 = (NoMods, "r2", Ident("Rate")) :: (NoMods, "r3", Ident("Rate")) :: Nilval argsList2 = (NoMods, "r2", Ident(newTermName("Rate"))) :: (NoMods, "r3", Ident(newTermName("Rate"))) :: Nildef testCaseClassOneArg() = {def testCaseClassOneArg() = {argss = ((NoMods, "rate", Ident("Rate")) :: Nil) :: Nil) prettyPrintsTo "case class A(rate: Rate)"argss = ((NoMods, "rate", Ident(newTermName("Rate"))) :: Nil) :: Nil) prettyPrintsTo "case class A(rate: Rate)"def testCaseClassTwoArgs() = {def testCaseClassTwoArgs() = {argss = List(List((NoMods, "x", Ident("Int")), (NoMods, "y", Ident("String"))))) prettyPrintsTo "case class A(x: Int, y: String)"argss = List(List((NoMods, "x", Ident(newTermName("Int"))), (NoMods, "y", Ident(newTermName("String")))))) prettyPrintsTo "case class A(x: Int, y: String)"def testClassTwoArgs() = {def testClassTwoArgs() = {argss = List(List((NoMods, "x", Ident("Int")), (NoMods, "y", Ident("String"))))) prettyPrintsTo "class A(x: Int, y: String)"argss = List(List((NoMods, "x", Ident(newTermName("Int"))), (NoMods, "y", Ident(newTermName("String")))))) prettyPrintsTo "class A(x: Int, y: String)"def testClassTwoValVarArgs() = {def testClassTwoValVarArgs() = {argss = List(List((NoMods withPosition (Tokens.VAL, NoPosition), "x", Ident("Int")), (NoMods withPosition (Tokens.VAR, NoPosition), "y", Ident("String"))))) prettyPrintsTo "class A(val x: Int, var y: String)"argss = List(List((NoMods withPosition (Tokens.VAL, NoPosition), "x", Ident(newTermName("Int"))), (NoMods withPosition (Tokens.VAR, NoPosition), "y", Ident(newTermName("String")))))) prettyPrintsTo "class A(val x: Int, var y: String)"argss = ((NoMods, "x", Ident("Int")) :: Nil) :: Nil,argss = ((NoMods, "x", Ident(newTermName("Int"))) :: Nil) :: Nil,parents = Ident("X") :: Ident("Y") :: Nil)parents = Ident(newTermName("X")) :: Ident(newTermName("Y")) :: Nil)argss = ((NoMods, "x", Ident("Int")) :: Nil) :: Nil,argss = ((NoMods, "x", Ident(newTermName("Int"))) :: Nil) :: Nil,parents = Ident("X") :: Nil,parents = Ident(newTermName("X")) :: Nil,superArgs = Ident("x") :: Nil)superArgs = Ident(newTermName("x")) :: Nil)List(List(ValDef(NoMods withPosition (Flags.IMPLICIT, NoPosition), "a", EmptyTree, EmptyTree))),List(List(ValDef(NoMods withPosition (Flags.IMPLICIT, NoPosition), newTermName("a"), EmptyTree, EmptyTree))),def testDefDefWithTypeParams = {def testDefDefWithTypeParams = {val arg = ValDef(NoMods withPosition (Flags.IMPLICIT, NoPosition), "a",val arg = ValDef(NoMods withPosition (Flags.IMPLICIT, NoPosition), newTermName("a"),TypeDef(NoMods, "R".toTypeName, TypeDef(NoMods, "X".toTypeName, Nil, EmptyTree) :: Nil, EmptyTree), EmptyTree)TypeDef(NoMods, newTypeName("R"), TypeDef(NoMods, newTypeName("X"), Nil, EmptyTree) :: Nil, EmptyTree), EmptyTree)TypeDef(NoMods, "X".toTypeName, Nil, EmptyTree) :: Nil,TypeDef(NoMods, newTypeName("X"), Nil, EmptyTree) :: Nil,val doc = DocDef(DocComment("/** Kuuka */", NoPosition), EmptyTree)val doc = DocDef(DocComment("/** Kuuka */", NoPosition), EmptyTree)val tree = mkDefDef(name = "meth", body = doc :: Ident("()") :: Nil)val tree = mkDefDef(name = "meth", body = doc :: Ident(newTermName("()")) :: Nil)tree prettyPrintsTo """def meth() = {tree prettyPrintsTo """def meth() = {def testApplyHasParens() = {def testApplyHasParens() = {Apply(Ident( "aa" ), Nil) prettyPrintsTo """aa()"""Apply(Ident(newTermName("aa")), Nil) prettyPrintsTo """aa()"""def testApplyTypesToClass() = {def testApplyTypesToClass() = {TypeApply(Ident("MyClass"), Ident("A") :: Ident("B") :: Nil) prettyPrintsTo """MyClass[A, B]"""TypeApply(Ident(newTermName("MyClass")), Ident(newTermName("A")) :: Ident(newTermName("B")) :: Nil) prettyPrintsTo """MyClass[A, B]"""def testClassWithTypeParams() = {def testClassWithTypeParams() = {val c = mkClass(name = "A", tparams = List(TypeDef(NoMods, "T".toTypeName, Nil, EmptyTree), TypeDef(NoMods, "U".toTypeName, Nil, EmptyTree)))val c = mkClass(name = "A", tparams = List(TypeDef(NoMods, newTypeName("T"), Nil, EmptyTree), TypeDef(NoMods, newTypeName("U"), Nil, EmptyTree)))def testFloatLiteralFromIdent() = {def testFloatLiteralFromIdent() = {Ident( "33.3f") prettyPrintsTo """33.3f"""Ident(newTermName("33.3f")) prettyPrintsTo """33.3f"""TypeDef( NoMods, "R".toTypeName, Nil, TypeBoundsTree( EmptyTree, TypeDef( NoMods, "Rate".toTypeName, Nil, EmptyTree ))) :: Nil,TypeDef( NoMods, newTypeName("R"), Nil, TypeBoundsTree( EmptyTree, TypeDef( NoMods, newTypeName("Rate"), Nil, EmptyTree ))) :: Nil,