File tree Expand file tree Collapse file tree 3 files changed +48
-4
lines changed
compiler/src/dotty/tools/dotc/typer Expand file tree Collapse file tree 3 files changed +48
-4
lines changed Original file line number Diff line number Diff line change @@ -702,8 +702,8 @@ object RefChecks {
702702
703703 val missingMethods = grouped.toList flatMap {
704704 case (name, syms) =>
705- val withoutSetters = syms filterNot ( _.isSetter)
706- if (withoutSetters.nonEmpty) withoutSetters else syms
705+ syms.filterConserve( ! _.isSetter)
706+ .distinctBy(_.signature) // Avoid duplication for similar definitions (#19731)
707707 }
708708
709709 def stubImplementations : List [String ] = {
@@ -714,7 +714,7 @@ object RefChecks {
714714
715715 if (regrouped.tail.isEmpty)
716716 membersStrings(regrouped.head._2)
717- else (regrouped.sortBy(" " + _._1.name) flatMap {
717+ else (regrouped.sortBy(_._1.name.toString() ) flatMap {
718718 case (owner, members) =>
719719 (" // Members declared in " + owner.fullName) +: membersStrings(members) :+ " "
720720 }).init
@@ -733,7 +733,7 @@ object RefChecks {
733733 return
734734 }
735735
736- for (member <- missing ) {
736+ for (member <- missingMethods ) {
737737 def showDclAndLocation (sym : Symbol ) =
738738 s " ${sym.showDcl} in ${sym.owner.showLocated}"
739739 def undefined (msg : String ) =
Original file line number Diff line number Diff line change 1+ -- Error: tests/neg/i19731.scala:4:6 -----------------------------------------------------------------------------------
2+ 4 |class F1 extends Foo: // error
3+ | ^
4+ | class F1 needs to be abstract, since def foo(): Unit in class F1 is not defined
5+ -- Error: tests/neg/i19731.scala:7:6 -----------------------------------------------------------------------------------
6+ 7 |class F2 extends Foo: // error
7+ | ^
8+ | class F2 needs to be abstract, since:
9+ | it has 2 unimplemented members.
10+ | /** As seen from class F2, the missing signatures are as follows.
11+ | * For convenience, these are usable as stub implementations.
12+ | */
13+ | def foo(): Unit = ???
14+ | def foo(x: Int): Unit = ???
15+ -- Error: tests/neg/i19731.scala:16:6 ----------------------------------------------------------------------------------
16+ 16 |class B1 extends Bar: // error
17+ | ^
18+ | class B1 needs to be abstract, since:
19+ | it has 2 unimplemented members.
20+ | /** As seen from class B1, the missing signatures are as follows.
21+ | * For convenience, these are usable as stub implementations.
22+ | */
23+ | // Members declared in B1
24+ | def foo(x: Int): Unit = ???
25+ |
26+ | // Members declared in Bar
27+ | def foo(): Unit = ???
Original file line number Diff line number Diff line change 1+ trait Foo :
2+ def foo (): Unit
3+
4+ class F1 extends Foo : // error
5+ def foo (): Unit
6+
7+ class F2 extends Foo : // error
8+ def foo (): Unit
9+ def foo (x : Int ): Unit
10+
11+
12+ trait Bar :
13+ def foo (): Unit
14+ def foo (x : Int ): Unit
15+
16+ class B1 extends Bar : // error
17+ def foo (x : Int ): Unit
You can’t perform that action at this time.
0 commit comments