@@ -449,27 +449,29 @@ object Denotations {
449
449
* - minimizes raising of doubleDef errors
450
450
*/
451
451
def preferSym (sym1 : Symbol , sym2 : Symbol ) =
452
- sym1.eq(sym2) ||
453
- sym1.exists &&
454
- (! sym2.exists ||
455
- sym1.isAsConcrete(sym2) &&
456
- (! sym2.isAsConcrete(sym1) ||
457
- precedes(sym1.owner, sym2.owner) ||
458
- accessBoundary(sym2).isProperlyContainedIn(accessBoundary(sym1)) ||
459
- sym2.is(Bridge ) && ! sym1.is(Bridge ) ||
460
- sym1.is(Method ) && ! sym2.is(Method )) ||
461
- sym1.info.isErroneous)
452
+ sym1.eq(sym2)
453
+ || sym1.exists
454
+ && (! sym2.exists
455
+ || sym1.isAsConcrete(sym2)
456
+ && (! sym2.isAsConcrete(sym1)
457
+ || precedes(sym1.owner, sym2.owner)
458
+ || accessBoundary(sym2).isProperlyContainedIn(accessBoundary(sym1))
459
+ || sym2.is(Bridge ) && ! sym1.is(Bridge )
460
+ || sym1.is(Method ) && ! sym2.is(Method ))
461
+ || sym1.info.isErroneous)
462
+
463
+ def preferSymSimple (sym1 : Symbol , sym2 : Symbol ) =
464
+ sym1.is(Method ) && ! sym2.is(Method ) || sym1.info.isErroneous
462
465
463
466
/** Sym preference provided types also override */
464
467
def prefer (sym1 : Symbol , sym2 : Symbol , info1 : Type , info2 : Type ) =
465
468
preferSym(sym1, sym2) &&
466
469
info1.overrides(info2, sym1.matchNullaryLoosely || sym2.matchNullaryLoosely, checkClassInfo = false )
467
470
468
471
def handleDoubleDef : Denotation =
469
- if (preferSym(sym1, sym2)) denot1
470
- else if (preferSym(sym2, sym1)) denot2
471
- else if sym1.exists then MultiDenotation (denot1, denot2)
472
- else doubleDefError(denot1, denot2, pre)
472
+ if preferSymSimple(sym1, sym2) then denot1
473
+ else if preferSymSimple(sym2, sym1) then denot2
474
+ else MultiDenotation (denot1, denot2)
473
475
474
476
if (sym2Accessible && prefer(sym2, sym1, info2, info1)) denot2
475
477
else {
0 commit comments