Skip to content

Commit dee1e03

Browse files
committed
Remove last redundant condition and compensate for it in individual tests
1 parent e008f6e commit dee1e03

File tree

1 file changed

+13
-29
lines changed

1 file changed

+13
-29
lines changed

compiler/src/dotty/tools/dotc/typer/RefChecks.scala

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -360,31 +360,6 @@ object RefChecks {
360360

361361
//Console.println(infoString(member) + " overrides " + infoString(other) + " in " + clazz);//DEBUG
362362

363-
// return if we already checked this combination elsewhere
364-
if (member.owner != clazz) {
365-
def deferredCheck = member.is(Deferred) || !other.is(Deferred)
366-
def subOther(s: Symbol) = s derivesFrom other.owner
367-
def subMember(s: Symbol) = s derivesFrom member.owner
368-
369-
if (subOther(member.owner) && deferredCheck)
370-
//println(i"skip 1 ${member.showLocated}, ${other.showLocated}")
371-
//Console.println(infoString(member) + " shadows1 " + infoString(other) " in " + clazz);//DEBUG
372-
return
373-
/*
374-
val parentSymbols = clazz.info.parents.map(_.typeSymbol)
375-
def matchIn(parent: Symbol): Boolean = considerMatching(member, other, parent.thisType)
376-
if parentSymbols.exists(p =>
377-
subOther(p) && subMember(p) && deferredCheck && matchIn(p))
378-
then
379-
println(i"skip 2 ${member.showLocated}, ${other.showLocated}")
380-
//Console.println(infoString(member) + " shadows2 " + infoString(other) + " in " + clazz);//DEBUG
381-
return
382-
if parentSymbols.forall(p => subOther(p) == subMember(p) && matchIn(p)) then
383-
println(i"skip 3 ${member.showLocated}, ${other.showLocated}")
384-
//Console.println(infoString(member) + " shadows " + infoString(other) + " in " + clazz);//DEBUG
385-
return*/
386-
}
387-
388363
/* Is the intersection between given two lists of overridden symbols empty? */
389364
def intersectionIsEmpty(syms1: Iterator[Symbol], syms2: Iterator[Symbol]) = {
390365
val set2 = syms2.toSet
@@ -419,7 +394,9 @@ object RefChecks {
419394
overrideError("cannot be used here - class definitions cannot be overridden")
420395
else if (!other.is(Deferred) && member.isClass)
421396
overrideError("cannot be used here - classes can only override abstract types")
422-
else if (other.isEffectivelyFinal) // (1.2)
397+
else if other.isEffectivelyFinal && !member.owner.derivesFrom(other.owner) then // (1.2)
398+
// If member is in a subclass, we checked this before or the signatures are different
399+
// This escape clause is needed to make MapView in stdlib213 compile
423400
overrideError(i"cannot override final member ${other.showLocated}")
424401
else if (member.is(ExtensionMethod) && !other.is(ExtensionMethod)) // (1.3)
425402
overrideError("is an extension method, cannot override a normal method")
@@ -440,15 +417,22 @@ object RefChecks {
440417
member.setFlag(Override)
441418
else if (member.isType && self.memberInfo(member) =:= self.memberInfo(other))
442419
() // OK, don't complain about type aliases which are equal
443-
else if (member.owner != clazz && other.owner != clazz &&
444-
!(other.owner derivesFrom member.owner))
420+
else if member.owner != clazz
421+
&& other.owner != clazz
422+
&& !other.owner.derivesFrom(member.owner)
423+
&& !member.owner.derivesFrom(other.owner)
424+
then
445425
emitOverrideError(
446426
s"$clazz inherits conflicting members:\n "
447427
+ infoStringWithLocation(other) + " and\n " + infoStringWithLocation(member)
448428
+ "\n(Note: this can be resolved by declaring an override in " + clazz + ".)")
449429
else if member.is(Exported) then
450430
overrideError("cannot override since it comes from an export")
451-
else
431+
else if !member.owner.derivesFrom(other.owner) then
432+
// if `member.owner` derives from `other.owner` then the relationship was either
433+
// checked before, or `member` and `other` have different signatures in `member.owner`,
434+
// in which case we could not add an `override` anyway.
435+
// This escape clause is needed to make MapView in stdlib213 compile
452436
overrideError("needs `override` modifier")
453437
else if (other.is(AbsOverride) && other.isIncompleteIn(clazz) && !member.is(AbsOverride))
454438
overrideError("needs `abstract override` modifiers")

0 commit comments

Comments
 (0)