Skip to content

Commit 54385d4

Browse files
authored
Merge pull request #8347 from dotty-staging/fix-export-errmsg
Improve overriding error message for exports
2 parents d37a543 + 32d981e commit 54385d4

File tree

4 files changed

+36
-0
lines changed

4 files changed

+36
-0
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,8 @@ object RefChecks {
362362
s"$clazz inherits conflicting members:\n "
363363
+ infoStringWithLocation(other) + " and\n " + infoStringWithLocation(member)
364364
+ "\n(Note: this can be resolved by declaring an override in " + clazz + ".)")
365+
else if member.is(Exported) then
366+
overrideError("cannot override since it comes from an export")
365367
else
366368
overrideError("needs `override` modifier")
367369
else if (other.is(AbsOverride) && other.isIncompleteIn(clazz) && !member.is(AbsOverride))

tests/neg/exports1.scala

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
object A:
2+
def f: String = ""
3+
4+
trait B:
5+
def f: String = "abc"
6+
7+
trait B2 extends B:
8+
override def f: String = "abc"
9+
10+
object D extends B:
11+
object b extends B
12+
export b._ // ok
13+
14+
object D1 extends B:
15+
object b extends B
16+
export b.f // error
17+
18+
object D2 extends B:
19+
object b2 extends B2
20+
export b2.f // error

tests/neg/exports2.check

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
-- Error: tests/neg/exports2.scala:8:11 --------------------------------------------------------------------------------
2+
8 | export A._ // error
3+
| ^
4+
| error overriding method f in trait B of type => String;
5+
| method f of type => String cannot override since it comes from an export

tests/neg/exports2.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
object A:
2+
def f: String = ""
3+
4+
trait B:
5+
def f: String = "abc"
6+
7+
object C extends B:
8+
export A._ // error
9+

0 commit comments

Comments
 (0)