File tree 3 files changed +48
-4
lines changed
compiler/src/dotty/tools/dotc/typer
3 files changed +48
-4
lines changed Original file line number Diff line number Diff line change @@ -702,8 +702,8 @@ object RefChecks {
702
702
703
703
val missingMethods = grouped.toList flatMap {
704
704
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)
707
707
}
708
708
709
709
def stubImplementations : List [String ] = {
@@ -714,7 +714,7 @@ object RefChecks {
714
714
715
715
if (regrouped.tail.isEmpty)
716
716
membersStrings(regrouped.head._2)
717
- else (regrouped.sortBy(" " + _._1.name) flatMap {
717
+ else (regrouped.sortBy(_._1.name.toString() ) flatMap {
718
718
case (owner, members) =>
719
719
(" // Members declared in " + owner.fullName) +: membersStrings(members) :+ " "
720
720
}).init
@@ -733,7 +733,7 @@ object RefChecks {
733
733
return
734
734
}
735
735
736
- for (member <- missing ) {
736
+ for (member <- missingMethods ) {
737
737
def showDclAndLocation (sym : Symbol ) =
738
738
s " ${sym.showDcl} in ${sym.owner.showLocated}"
739
739
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