@@ -105,45 +105,52 @@ trait Lifter {
105105 }
106106
107107 val lifted = liftableSyms.map(symToTree).toList.map {
108- case vd@ ValDef (_, _, tpt, rhs) =>
109- import reflect .internal .Flags ._
110- val sym = vd.symbol
111- sym.setFlag(MUTABLE | STABLE | PRIVATE | LOCAL )
112- sym.name = name.fresh(sym.name.toTermName)
113- sym.modifyInfo(_.deconst)
114- ValDef (vd.symbol, gen.mkZero(vd.symbol.info)).setPos(vd.pos)
115- case dd@ DefDef (mods, name, tparams, vparamss, tpt, rhs) =>
116- import reflect .internal .Flags ._
117- val sym = dd.symbol
118- sym.name = this .name.fresh(sym.name.toTermName)
119- sym.setFlag(PRIVATE | LOCAL )
120- DefDef (dd.symbol, rhs).setPos(dd.pos)
121- case cd@ ClassDef (_, _, _, impl) =>
122- import reflect .internal .Flags ._
123- val sym = cd.symbol
124- sym.name = newTypeName(name.fresh(sym.name.toString).toString)
125- companionship.companionOf(cd.symbol) match {
126- case NoSymbol =>
127- case moduleSymbol =>
128- moduleSymbol.name = sym.name.toTermName
129- moduleSymbol.moduleClass.name = moduleSymbol.name.toTypeName
130- }
131- ClassDef (cd.symbol, impl).setPos(cd.pos)
132- case md@ ModuleDef (_, _, impl) =>
133- import reflect .internal .Flags ._
134- val sym = md.symbol
135- companionship.companionOf(md.symbol) match {
136- case NoSymbol =>
108+ t =>
109+ val treeLifted = t match {
110+ case vd@ ValDef (_, _, tpt, rhs) =>
111+ import reflect .internal .Flags ._
112+ val sym = vd.symbol
113+ sym.setFlag(MUTABLE | STABLE | PRIVATE | LOCAL )
137114 sym.name = name.fresh(sym.name.toTermName)
138- sym.moduleClass.name = sym.name.toTypeName
139- case classSymbol => // will be renamed by `case ClassDef` above.
115+ sym.modifyInfo(_.deconst)
116+ val zeroRhs = atPos(t.pos)(gen.mkZero(vd.symbol.info))
117+ treeCopy.ValDef (vd, Modifiers (sym.flags), sym.name, TypeTree (sym.tpe).setPos(t.pos), zeroRhs)
118+ case dd@ DefDef (_, _, tparams, vparamss, tpt, rhs) =>
119+ import reflect .internal .Flags ._
120+ val sym = dd.symbol
121+ sym.name = this .name.fresh(sym.name.toTermName)
122+ sym.setFlag(PRIVATE | LOCAL )
123+ // Was `DefDef(sym, rhs)`, but this ran afoul of `ToughTypeSpec.nestedMethodWithInconsistencyTreeAndInfoParamSymbols`
124+ // due to the handling of type parameter skolems in `thisMethodType` in `Namers`
125+ treeCopy.DefDef (dd, Modifiers (sym.flags), sym.name, tparams, vparamss, tpt, rhs)
126+ case cd@ ClassDef (_, _, tparams, impl) =>
127+ import reflect .internal .Flags ._
128+ val sym = cd.symbol
129+ sym.name = newTypeName(name.fresh(sym.name.toString).toString)
130+ companionship.companionOf(cd.symbol) match {
131+ case NoSymbol =>
132+ case moduleSymbol =>
133+ moduleSymbol.name = sym.name.toTermName
134+ moduleSymbol.moduleClass.name = moduleSymbol.name.toTypeName
135+ }
136+ treeCopy.ClassDef (cd, Modifiers (sym.flags), sym.name, tparams, impl)
137+ case md@ ModuleDef (_, _, impl) =>
138+ import reflect .internal .Flags ._
139+ val sym = md.symbol
140+ companionship.companionOf(md.symbol) match {
141+ case NoSymbol =>
142+ sym.name = name.fresh(sym.name.toTermName)
143+ sym.moduleClass.name = sym.name.toTypeName
144+ case classSymbol => // will be renamed by `case ClassDef` above.
145+ }
146+ treeCopy.ModuleDef (md, Modifiers (sym.flags), sym.name, impl)
147+ case td@ TypeDef (_, _, tparams, rhs) =>
148+ import reflect .internal .Flags ._
149+ val sym = td.symbol
150+ sym.name = newTypeName(name.fresh(sym.name.toString).toString)
151+ treeCopy.TypeDef (td, Modifiers (sym.flags), sym.name, tparams, rhs)
140152 }
141- ModuleDef (md.symbol, impl).setPos(md.pos)
142- case td@ TypeDef (_, _, _, rhs) =>
143- import reflect .internal .Flags ._
144- val sym = td.symbol
145- sym.name = newTypeName(name.fresh(sym.name.toString).toString)
146- TypeDef (td.symbol, rhs).setPos(td.pos)
153+ atPos(t.pos)(treeLifted)
147154 }
148155 lifted
149156 }
0 commit comments