@@ -1257,16 +1257,21 @@ class Typer extends Namer
12571257 val sym = t.symbol
12581258 val cls = ctx.newNormalizedClassSymbol(ctx.owner, tpnme.ANON_CLASS , Synthetic | Final , List (defn.ObjectType ), coord = sym.coord)
12591259 val constr = ctx.newConstructor(cls, Synthetic , Nil , Nil , coord = sym.coord).entered
1260- val unappplySym = ctx.newSymbol(cls, sym.name.toTermName, Synthetic | Method , sym.info, coord = sym.coord).entered
1261- val unapply = polyDefDef(unappplySym, targs => argss =>
1262- Inliner .inlineCall(t.fun.appliedToTypes(targs).appliedToArgss(argss).withSpan(t.span))(ctx.withOwner(unappplySym))
1263- )
1264- val cdef = ClassDef (cls, DefDef (constr), List (unapply))
1265- val newUnapply = Block (cdef :: Nil , New (cls.typeRef, Nil ))
1260+
12661261 val targs = t.fun match
12671262 case TypeApply (_, targs) => targs
12681263 case _ => Nil
1269- val newFun = newUnapply.select(unappplySym).appliedToTypeTrees(targs).withSpan(t.span)
1264+ val unapplyInfo = sym.info match
1265+ case info : PolyType => info.instantiate(targs.map(_.tpe))
1266+ case info => info
1267+
1268+ val unappplySym = ctx.newSymbol(cls, sym.name.toTermName, Synthetic | Method , unapplyInfo, coord = sym.coord).entered
1269+ val unapply = DefDef (unappplySym, argss =>
1270+ Inliner .inlineCall(t.fun.appliedToArgss(argss).withSpan(t.span))(ctx.withOwner(unappplySym))
1271+ )
1272+ val cdef = ClassDef (cls, DefDef (constr), List (unapply))
1273+ val newUnapply = Block (cdef :: Nil , New (cls.typeRef, Nil ))
1274+ val newFun = newUnapply.select(unappplySym).withSpan(t.span)
12701275 cpy.UnApply (t)(newFun, t.implicits, t.patterns)
12711276 case t => t
12721277 }
0 commit comments