aboutsummaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-12-19 14:14:32 +0100
committerFelix Mulder <felix.mulder@gmail.com>2016-12-20 18:33:45 +0100
commitb2e4cf1b7501b05871daf5f55aef5dd5aab1b2e1 (patch)
treee96e10121a0fa90cbbe937a8a3e489d9fae260fa /compiler
parent8e2a8db09680a4a5b715b02fa3491f683db9574d (diff)
downloaddotty-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.scala5
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")