diff options
author | Martin Odersky <odersky@gmail.com> | 2016-12-19 14:14:32 +0100 |
---|---|---|
committer | Felix Mulder <felix.mulder@gmail.com> | 2016-12-20 18:33:45 +0100 |
commit | b2e4cf1b7501b05871daf5f55aef5dd5aab1b2e1 (patch) | |
tree | e96e10121a0fa90cbbe937a8a3e489d9fae260fa /compiler | |
parent | 8e2a8db09680a4a5b715b02fa3491f683db9574d (diff) | |
download | dotty-b2e4cf1b7501b05871daf5f55aef5dd5aab1b2e1.tar.gz dotty-b2e4cf1b7501b05871daf5f55aef5dd5aab1b2e1.tar.bz2 dotty-b2e4cf1b7501b05871daf5f55aef5dd5aab1b2e1.zip |
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.
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/src/dotty/tools/dotc/typer/RefChecks.scala | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/compiler/src/dotty/tools/dotc/typer/RefChecks.scala b/compiler/src/dotty/tools/dotc/typer/RefChecks.scala index be15aba39..3192546cd 100644 --- a/compiler/src/dotty/tools/dotc/typer/RefChecks.scala +++ b/compiler/src/dotty/tools/dotc/typer/RefChecks.scala @@ -301,7 +301,7 @@ object RefChecks { // the default getter: one default getter might sometimes override, sometimes not. Example in comment on ticket. // Also excluded under Scala2 mode are overrides of default methods of Java traits. if (autoOverride(member) || - other.owner.is(JavaTrait) && ctx.scala2Mode) + other.owner.is(JavaTrait) && ctx.testScala2Mode("`override' modifier required when a Java 8 default method is re-implemented", member.pos)) member.setFlag(Override) else if (member.owner != clazz && other.owner != clazz && !(other.owner derivesFrom member.owner)) emitOverrideError( @@ -328,7 +328,8 @@ object RefChecks { overrideError("needs to be a stable, immutable value") } else if (member.is(ModuleVal) && !other.isRealMethod && !other.is(Deferred | Lazy)) { overrideError("may not override a concrete non-lazy value") - } else if (member.is(Lazy, butNot = Module) && !other.isRealMethod && !other.is(Lazy)) { + } else if (member.is(Lazy, butNot = Module) && !other.isRealMethod && !other.is(Lazy) && + !ctx.testScala2Mode("may not override a non-lazy value", member.pos)) { overrideError("may not override a non-lazy value") } else if (other.is(Lazy) && !other.isRealMethod && !member.is(Lazy)) { overrideError("must be declared lazy to override a lazy value") |