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