@@ -350,6 +350,9 @@ object TypeOps:
350
350
def classBound (info : ClassInfo )(using Context ): Type = {
351
351
val cls = info.cls
352
352
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)
353
356
354
357
def addRefinement (parent : Type , decl : Symbol ) = {
355
358
val inherited =
@@ -360,26 +363,22 @@ object TypeOps:
360
363
val isPolyFunctionApply = decl.name == nme.apply && (parent <:< defn.PolyFunctionType )
361
364
val needsRefinement =
362
365
isPolyFunctionApply
363
- || ! decl.isClass
364
- && {
366
+ || {
365
367
if inheritedInfo.exists then
366
368
decl.info.widenExpr <:< inheritedInfo.widenExpr
367
369
&& ! (inheritedInfo.widenExpr <:< decl.info.widenExpr)
368
370
else
369
371
parent.derivesFrom(defn.SelectableClass )
370
372
}
371
373
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))
374
375
else parent
375
376
}
376
377
377
378
def close (tp : Type ) = RecType .closeOver { rt =>
378
379
tp.subst(cls :: Nil , rt.recThis :: Nil ).substThis(cls, rt.recThis)
379
380
}
380
381
381
- def isRefinable (sym : Symbol ) = ! sym.is(Private ) && ! sym.isConstructor
382
- val refinableDecls = info.decls.filter(isRefinable)
383
382
val raw = refinableDecls.foldLeft(parentType)(addRefinement)
384
383
HKTypeLambda .fromParams(cls.typeParams, raw) match {
385
384
case tl : HKTypeLambda => tl.derivedLambdaType(resType = close(tl.resType))
0 commit comments