@@ -449,27 +449,29 @@ object Denotations {
449449 * - minimizes raising of doubleDef errors
450450 */
451451 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
462465
463466 /** Sym preference provided types also override */
464467 def prefer (sym1 : Symbol , sym2 : Symbol , info1 : Type , info2 : Type ) =
465468 preferSym(sym1, sym2) &&
466469 info1.overrides(info2, sym1.matchNullaryLoosely || sym2.matchNullaryLoosely, checkClassInfo = false )
467470
468471 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)
473475
474476 if (sym2Accessible && prefer(sym2, sym1, info2, info1)) denot2
475477 else {
0 commit comments