Skip to content

Commit 84fc139

Browse files
authored
Merge pull request #14724 from dotty-staging/fix-14722
Extend "cannot override mutable variable" restriction to deferred var…
2 parents 58b59a5 + 1a5b858 commit 84fc139

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ object RefChecks {
474474
overrideError("needs `override` modifier")
475475
else if (other.is(AbsOverride) && other.isIncompleteIn(clazz) && !member.is(AbsOverride))
476476
overrideError("needs `abstract override` modifiers")
477-
else if member.is(Override) && other.is(Accessor, butNot = Deferred) && other.accessedFieldOrGetter.is(Mutable, butNot = Lazy) then
477+
else if member.is(Override) && other.is(Mutable) then
478478
overrideError("cannot override a mutable variable")
479479
else if (member.isAnyOverride &&
480480
!(member.owner.thisType.baseClasses exists (_ isSubClass other.owner)) &&

tests/pos/i13019.scala renamed to tests/neg/i13019.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ class Ok2C extends Ok2 { override var i: Int = 1 }
1010

1111
// was: variable i of type Int cannot override a mutable variable
1212
trait NotOk {var i: Int}
13-
class NotOkC extends NotOk { override var i: Int = 1 }
13+
class NotOkC extends NotOk { override var i: Int = 1 } // error

tests/neg/i14722.scala

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
abstract class HasId(var id: String)
2+
3+
case class Entity(override val id: String) extends HasId(id) // error
4+
5+
object Test extends App {
6+
val entity = Entity("0001")
7+
entity.id = "0002"
8+
println(entity.id)
9+
}
10+
11+
trait HasId2:
12+
var id: String = ""
13+
14+
case class Entity2(override val id: String) extends HasId2 // error
15+
16+
trait HasId3:
17+
def id: String
18+
def id_=(x: String): Unit
19+
20+
case class Entity3(override var id: String) extends HasId3 // ok

0 commit comments

Comments
 (0)