@@ -1257,16 +1257,21 @@ class Typer extends Namer
1257
1257
val sym = t.symbol
1258
1258
val cls = ctx.newNormalizedClassSymbol(ctx.owner, tpnme.ANON_CLASS , Synthetic | Final , List (defn.ObjectType ), coord = sym.coord)
1259
1259
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
+
1266
1261
val targs = t.fun match
1267
1262
case TypeApply (_, targs) => targs
1268
1263
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)
1270
1275
cpy.UnApply (t)(newFun, t.implicits, t.patterns)
1271
1276
case t => t
1272
1277
}
0 commit comments