@@ -524,27 +524,16 @@ object SpaceEngine {
524524    val  mt :  MethodType  =  unapp.widen match  {
525525      case  mt : MethodType  =>  mt
526526      case  pt : PolyType    => 
527-         if  unappSym.is(Synthetic ) then 
528-           val  mt  =  pt.resultType.asInstanceOf [MethodType ]
529-           val  unapplyArgType  =  mt.paramInfos.head
530-           val  targs  =  scrutineeTp.baseType(unapplyArgType.classSymbol) match 
531-             case  AppliedType (_, targs) =>  targs
532-             case  _ => 
533-               //  Typically when the scrutinee is Null or Nothing (see i5067 and i5067b)
534-               //  For performance, do `variances(unapplyArgType)` but without using TypeVars
535-               //  so just find the variance, so we know if to min/max to the LB/UB or use a wildcard.
536-               object  accu  extends  TypeAccumulator [VarianceMap [TypeParamRef ]]: 
537-                 def  apply (vmap : VarianceMap [TypeParamRef ], tp : Type ) =  tp match 
538-                   case  tp : TypeParamRef  if  tp.binder eq pt =>  vmap.recordLocalVariance(tp, variance)
539-                   case  _                                   =>  foldOver(vmap, tp)
540-               val  vs  =  accu(VarianceMap .empty[TypeParamRef ], unapplyArgType)
541-               pt.paramRefs.map:  p => 
542-                 vs.computedVariance(p).uncheckedNN match 
543-                   case  - 1  =>  p.paramInfo.lo
544-                   case  1   =>  p.paramInfo.hi
545-                   case  _  =>  WildcardType (p.paramInfo)
527+         scrutineeTp match 
528+         case  AppliedType (tycon, targs)
529+             if  unappSym.is(Synthetic )
530+             &&  (pt.resultType.asInstanceOf [MethodType ].paramInfos.head.typeConstructor eq tycon) => 
531+           //  Special case synthetic unapply/unapplySeq's
532+           //  Provided the shapes of the types match:
533+           //  the scrutinee type being unapplied and
534+           //  the unapply parameter type
546535          pt.instantiate(targs).asInstanceOf [MethodType ]
547-         else 
536+         case  _  => 
548537          val  locked  =  ctx.typerState.ownedVars
549538          val  tvars  =  constrained(pt)
550539          val  mt  =  pt.instantiate(tvars).asInstanceOf [MethodType ]
0 commit comments