summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@epfl.ch>2012-06-21 00:24:29 -0700
committerAdriaan Moors <adriaan.moors@epfl.ch>2012-06-21 00:24:29 -0700
commit6aea0ae85f72594798ec6c96e30cc1aef48c3a99 (patch)
tree86deb078e36a7d2a64308c86f4c97b010f4b606d /src
parent320827255b736f8405ba3b9a3d5b92947157ba33 (diff)
parent2d3b6bd321724c565fd458a2bbffb4ad211c54ff (diff)
downloadscala-6aea0ae85f72594798ec6c96e30cc1aef48c3a99.tar.gz
scala-6aea0ae85f72594798ec6c96e30cc1aef48c3a99.tar.bz2
scala-6aea0ae85f72594798ec6c96e30cc1aef48c3a99.zip
Merge pull request #731 from retronym/ticket/5617
SI-5617 Better error message for "x overrides nothing".
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/RefChecks.scala11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
index 26cf246ed7..119bb0852c 100644
--- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
@@ -766,7 +766,16 @@ abstract class RefChecks extends InfoTransform with reflect.internal.transform.R
for (member <- clazz.info.decls)
if (member.isAnyOverride && !(clazz.thisType.baseClasses exists (hasMatchingSym(_, member)))) {
// for (bc <- clazz.info.baseClasses.tail) Console.println("" + bc + " has " + bc.info.decl(member.name) + ":" + bc.info.decl(member.name).tpe);//DEBUG
- unit.error(member.pos, member.toString() + " overrides nothing");
+
+ val nonMatching: List[Symbol] = clazz.info.member(member.name).alternatives.filterNot(_.owner == clazz).filterNot(_.isFinal)
+ def issueError(suffix: String) = unit.error(member.pos, member.toString() + " overrides nothing" + suffix);
+ nonMatching match {
+ case Nil =>
+ issueError("")
+ case ms =>
+ val superSigs = ms.map(m => m.defStringSeenAs(clazz.tpe memberType m)).mkString("\n")
+ issueError(s".\nNote: the super classes of ${member.owner} contain the following, non final members named ${member.name}:\n${superSigs}")
+ }
member resetFlag (OVERRIDE | ABSOVERRIDE) // Any Override
}
}