@@ -350,6 +350,9 @@ object TypeOps:
350350 def classBound (info : ClassInfo )(using Context ): Type = {
351351 val cls = info.cls
352352 val parentType = info.parents.reduceLeft(TypeComparer .andType(_, _))
353+ def isRefinable (sym : Symbol ) =
354+ ! sym.is(Private ) && ! sym.isConstructor && ! sym.isClass
355+ val (refinableDecls, missingDecls) = info.decls.toList.partition(isRefinable)
353356
354357 def addRefinement (parent : Type , decl : Symbol ) = {
355358 val inherited =
@@ -360,26 +363,22 @@ object TypeOps:
360363 val isPolyFunctionApply = decl.name == nme.apply && (parent <:< defn.PolyFunctionType )
361364 val needsRefinement =
362365 isPolyFunctionApply
363- || ! decl.isClass
364- && {
366+ || {
365367 if inheritedInfo.exists then
366368 decl.info.widenExpr <:< inheritedInfo.widenExpr
367369 && ! (inheritedInfo.widenExpr <:< decl.info.widenExpr)
368370 else
369371 parent.derivesFrom(defn.SelectableClass )
370372 }
371373 if needsRefinement then
372- RefinedType (parent, decl.name, decl.info)
373- .showing(i " add ref $parent $decl --> " + result, typr)
374+ RefinedType (parent, decl.name, avoid(decl.info, missingDecls))
374375 else parent
375376 }
376377
377378 def close (tp : Type ) = RecType .closeOver { rt =>
378379 tp.subst(cls :: Nil , rt.recThis :: Nil ).substThis(cls, rt.recThis)
379380 }
380381
381- def isRefinable (sym : Symbol ) = ! sym.is(Private ) && ! sym.isConstructor
382- val refinableDecls = info.decls.filter(isRefinable)
383382 val raw = refinableDecls.foldLeft(parentType)(addRefinement)
384383 HKTypeLambda .fromParams(cls.typeParams, raw) match {
385384 case tl : HKTypeLambda => tl.derivedLambdaType(resType = close(tl.resType))
0 commit comments