From 972e5c52af5da6921a398a91db9db39da2addd2e Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Thu, 19 Feb 2009 15:04:17 +0000 Subject: Improved error messages for certain illegal ove... Improved error messages for certain illegal overriding situations, plus test cases. Resolves bug #276. --- src/compiler/scala/tools/nsc/typechecker/RefChecks.scala | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src') diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala index 745979790b..bcc1a1686e 100644 --- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala +++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala @@ -208,6 +208,11 @@ abstract class RefChecks extends InfoTransform { (ob == RootClass || ob == NoSymbol || !ob.hasTransOwner(mb) || (other hasFlag PROTECTED) && !(member hasFlag PROTECTED))) { overrideAccessError() + } + else if (other.isClass || other.isModule) { + overrideError("cannot be used here - classes and objects cannot be overridden"); + } else if (!other.isDeferred && (member.isClass || member.isModule)) { + overrideError("cannot be used here - classes and objects can only override abstract types"); } else if (other hasFlag FINAL) { // (1.2) overrideError("cannot override final member"); } else if (!other.isDeferred && !(member hasFlag (OVERRIDE | ABSOVERRIDE | SYNTHETIC))) { // (1.3), SYNTHETIC because of DEVIRTUALIZE -- cgit v1.2.3