diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-06-17 11:47:11 +0200 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-06-17 11:55:12 +0200 |
commit | 2d3b6bd321724c565fd458a2bbffb4ad211c54ff (patch) | |
tree | d512a70ac2148ebec4b9528852357f6dacebd8ab /src/compiler | |
parent | 277dc7cf43566f8294bde4143107d9bfaa59e8e3 (diff) | |
download | scala-2d3b6bd321724c565fd458a2bbffb4ad211c54ff.tar.gz scala-2d3b6bd321724c565fd458a2bbffb4ad211c54ff.tar.bz2 scala-2d3b6bd321724c565fd458a2bbffb4ad211c54ff.zip |
SI-5617 Better error message for "x overrides nothing".
"It looks like you're trying to override a method", notes Clippy.
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/RefChecks.scala | 11 |
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 } } |