diff options
author | James Iry <james.iry@typesafe.com> | 2012-12-10 15:22:49 -0800 |
---|---|---|
committer | James Iry <james.iry@typesafe.com> | 2012-12-10 15:25:50 -0800 |
commit | f029c3a141972b23e33310e23db72e0e602a46ca (patch) | |
tree | 1c144c372307439b2ae24a1509574ba50c364ae4 /src | |
parent | 71e42a799aa11fda75d9d3e7b92da9f61dd1da5b (diff) | |
download | scala-f029c3a141972b23e33310e23db72e0e602a46ca.tar.gz scala-f029c3a141972b23e33310e23db72e0e602a46ca.tar.bz2 scala-f029c3a141972b23e33310e23db72e0e602a46ca.zip |
SI-6795 Simplify errors related to "abstract override" on type members
Instead of saying "only allowed on non-type members of traits" use
separate errors for "not allowed on types" and "only allowed on members
of traits"
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala | 7 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Namers.scala | 8 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala b/src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala index 9bceb91d4e..4268398081 100644 --- a/src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala +++ b/src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala @@ -980,7 +980,7 @@ trait ContextErrors { object SymValidateErrors extends Enumeration { val ImplicitConstr, ImplicitNotTermOrClass, ImplicitAtToplevel, OverrideClass, SealedNonClass, AbstractNonClass, - OverrideConstr, AbstractOverride, LazyAndEarlyInit, + OverrideConstr, AbstractOverride, AbstractOverrideOnTypeMember, LazyAndEarlyInit, ByNameParameter, AbstractVar = Value } @@ -1077,7 +1077,10 @@ trait ContextErrors { "`override' modifier not allowed for constructors" case AbstractOverride => - "`abstract override' modifier only allowed for non-type members of traits" + "`abstract override' modifier only allowed for members of traits" + + case AbstractOverrideOnTypeMember => + "`abstract override' modifier not allowed for type members" case LazyAndEarlyInit => "`lazy' definitions may not be initialized early" diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala index c6eacf1fb7..98b6264051 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala @@ -1443,8 +1443,12 @@ trait Namers extends MethodSynthesis { if (sym.isConstructor && sym.isAnyOverride) fail(OverrideConstr) - if (sym.isAbstractOverride && (!sym.owner.isTrait || sym.isType)) - fail(AbstractOverride) + if (sym.isAbstractOverride) { + if (!sym.owner.isTrait) + fail(AbstractOverride) + if(sym.isType) + fail(AbstractOverrideOnTypeMember) + } if (sym.isLazy && sym.hasFlag(PRESUPER)) fail(LazyAndEarlyInit) if (sym.info.typeSymbol == FunctionClass(0) && sym.isValueParameter && sym.owner.isCaseClass) |