summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-08-21 17:35:21 +0000
committerMartin Odersky <odersky@gmail.com>2006-08-21 17:35:21 +0000
commitc4bc5bc26afd0356d38374955462dd8aea8782bd (patch)
treebe6dc853810aba7223efca5253649d75b74dd5df /src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
parent1536b1c67ecff52027a0c24d6791fb978fb88db4 (diff)
downloadscala-c4bc5bc26afd0356d38374955462dd8aea8782bd.tar.gz
scala-c4bc5bc26afd0356d38374955462dd8aea8782bd.tar.bz2
scala-c4bc5bc26afd0356d38374955462dd8aea8782bd.zip
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/RefChecks.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/RefChecks.scala13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
index 6a9d3b9ab4..e5c82085fb 100644
--- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
@@ -69,6 +69,8 @@ abstract class RefChecks extends InfoTransform {
* 1.8.2 M is of type []S, O is of type ()T and S <: T, or
* 1.8.3 M is of type ()S, O is of type []T and S <: T, or
* 2. Check that only abstract classes have deferred members
+ * 3. Check that every member with an `override' modifier
+ * overrides some other member.
*/
private def checkAllOverrides(clazz: Symbol): unit = {
@@ -239,6 +241,17 @@ abstract class RefChecks extends InfoTransform {
else ""))
}
}
+
+ // 3. Check that every defined member with an `override' modifier overrides some other member.
+ for (val member <- clazz.info.decls.toList)
+ if ((member hasFlag (OVERRIDE | ABSOVERRIDE)) &&
+ (clazz.info.baseClasses.tail forall {
+ bc => member.matchingSymbol(bc, clazz.thisType) == NoSymbol
+ })) {
+ // for (val bc <- clazz.info.baseClasses.tail) System.out.println("" + bc + " has " + bc.info.decl(member.name) + ":" + bc.info.decl(member.name).tpe);//DEBUG
+ unit.error(member.pos, member.toString() + " overrides nothing");
+ member resetFlag OVERRIDE
+ }
}
// Basetype Checking --------------------------------------------------------