Skip to content

Commit 04a0795

Browse files
committed
Add two refcheck migration warnings
1. Overriding a Java-8 concrete method now produces a migration warning under -language:Scala2, 2. Overriding a normal with a lazy val is now a migration warning instead of an error.
1 parent f992c14 commit 04a0795

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ object RefChecks {
301301
// the default getter: one default getter might sometimes override, sometimes not. Example in comment on ticket.
302302
// Also excluded under Scala2 mode are overrides of default methods of Java traits.
303303
if (autoOverride(member) ||
304-
other.owner.is(JavaTrait) && ctx.scala2Mode)
304+
other.owner.is(JavaTrait) && ctx.testScala2Mode("`override' modifier required when a Java 8 default method is re-implemented", member.pos))
305305
member.setFlag(Override)
306306
else if (member.owner != clazz && other.owner != clazz && !(other.owner derivesFrom member.owner))
307307
emitOverrideError(
@@ -328,7 +328,8 @@ object RefChecks {
328328
overrideError("needs to be a stable, immutable value")
329329
} else if (member.is(ModuleVal) && !other.isRealMethod && !other.is(Deferred | Lazy)) {
330330
overrideError("may not override a concrete non-lazy value")
331-
} else if (member.is(Lazy, butNot = Module) && !other.isRealMethod && !other.is(Lazy)) {
331+
} else if (member.is(Lazy, butNot = Module) && !other.isRealMethod && !other.is(Lazy) &&
332+
!ctx.testScala2Mode("may not override a non-lazy value", member.pos)) {
332333
overrideError("may not override a non-lazy value")
333334
} else if (other.is(Lazy) && !other.isRealMethod && !member.is(Lazy)) {
334335
overrideError("must be declared lazy to override a lazy value")

0 commit comments

Comments
 (0)