@@ -427,15 +427,20 @@ class Setup extends PreRecheck, SymTransformer, SetupAPI:
427427 def setupTraverser (checker : CheckerAPI ) = new TreeTraverserWithPreciseImportContexts :
428428 import checker .*
429429
430+ private val paramSigChange = util.EqHashSet [Tree ]()
431+
430432 /** Transform type of tree, and remember the transformed type as the type the tree */
431433 private def transformTT (tree : TypeTree , sym : Symbol , boxed : Boolean )(using Context ): Unit =
432434 if ! tree.hasNuType then
433- val transformed =
435+ var transformed =
434436 if tree.isInferred
435437 then transformInferredType(tree.tpe)
436438 else transformExplicitType(tree.tpe, tptToCheck = tree)
439+ if boxed then transformed = box(transformed)
440+ if sym.is(Param ) && (transformed ne tree.tpe) then
441+ paramSigChange += tree
437442 tree.setNuType(
438- if boxed then box( transformed) else Fresh .fromCap(transformed, sym))
443+ if boxed then transformed else Fresh .fromCap(transformed, sym))
439444
440445 /** Transform the type of a val or var or the result type of a def */
441446 def transformResultType (tpt : TypeTree , sym : Symbol )(using Context ): Unit =
@@ -501,6 +506,9 @@ class Setup extends PreRecheck, SymTransformer, SetupAPI:
501506 inContext(ctx.withOwner(sym))
502507 traverseChildren(tree)
503508
509+ case tree @ TypeDef (_, rhs : TypeTree ) =>
510+ transformTT(rhs, tree.symbol, boxed = false )
511+
504512 case tree @ SeqLiteral (elems, tpt : TypeTree ) =>
505513 traverse(elems)
506514 tpt.setNuType(box(transformInferredType(tpt.tpe)))
@@ -544,8 +552,8 @@ class Setup extends PreRecheck, SymTransformer, SetupAPI:
544552 def paramSignatureChanges = tree.match
545553 case tree : DefDef =>
546554 tree.paramss.nestedExists:
547- case param : ValDef => param.tpt.hasNuType
548- case param : TypeDef => param.rhs.hasNuType
555+ case param : ValDef => paramSigChange.contains( param.tpt)
556+ case param : TypeDef => paramSigChange.contains( param.rhs)
549557 case _ => false
550558
551559 // A symbol's signature changes if some of its parameter types or its result type
@@ -580,7 +588,7 @@ class Setup extends PreRecheck, SymTransformer, SetupAPI:
580588 mt.paramInfos
581589 else
582590 val subst = SubstParams (psyms :: prevPsymss, mt1 :: prevLambdas)
583- psyms.map(psym => adaptedInfo(psym, subst(psym.nextInfo).asInstanceOf [mt.PInfo ])),
591+ psyms.map(psym => adaptedInfo(psym, subst(Fresh .toCap( psym.nextInfo) ).asInstanceOf [mt.PInfo ])),
584592 mt1 =>
585593 integrateRT(mt.resType, psymss.tail, resType, psyms :: prevPsymss, mt1 :: prevLambdas)
586594 )
0 commit comments