aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-12-19 18:58:56 +0100
committerMartin Odersky <odersky@gmail.com>2015-12-19 18:59:40 +0100
commitaad036c4720aac43a41ab8d994d51d71d233031d (patch)
tree29de864037fb135981c61176e3f2614dabc4c4d6 /src
parent7dafb2ac6d5fd41cfc0a94f2a72b881987890abf (diff)
downloaddotty-aad036c4720aac43a41ab8d994d51d71d233031d.tar.gz
dotty-aad036c4720aac43a41ab8d994d51d71d233031d.tar.bz2
dotty-aad036c4720aac43a41ab8d994d51d71d233031d.zip
Don't flag override errors for synthetic companion objects.
Diffstat (limited to 'src')
-rw-r--r--src/dotty/tools/dotc/typer/RefChecks.scala9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/typer/RefChecks.scala b/src/dotty/tools/dotc/typer/RefChecks.scala
index 00518278c..7ccb3d103 100644
--- a/src/dotty/tools/dotc/typer/RefChecks.scala
+++ b/src/dotty/tools/dotc/typer/RefChecks.scala
@@ -211,7 +211,7 @@ object RefChecks {
if (!(hasErrors && member.is(Synthetic) && member.is(Module))) {
// suppress errors relating toi synthetic companion objects if other override
// errors (e.g. relating to the companion class) have already been reported.
- if (member.owner == clazz) ctx.error(fullmsg, member.pos)
+ if (member.owner == clazz) ctx.error(fullmsg+", member = $member", member.pos)
else mixinOverrideErrors += new MixinOverrideError(member, fullmsg)
hasErrors = true
}
@@ -221,6 +221,11 @@ object RefChecks {
emitOverrideError(overrideErrorMsg(msg))
}
+ def autoOverride(sym: Symbol) =
+ sym.is(Synthetic) && (
+ desugar.isDesugaredCaseClassMethodName(member.name) || // such names are added automatically, can't have an override preset.
+ sym.is(Module)) // synthetic companion
+
def overrideAccessError() = {
ctx.log(i"member: ${member.showLocated} ${member.flags}") // DEBUG
ctx.log(i"other: ${other.showLocated} ${other.flags}") // DEBUG
@@ -300,7 +305,7 @@ object RefChecks {
!member.isAnyOverride) {
// (*) Exclusion for default getters, fixes SI-5178. We cannot assign the Override flag to
// the default getter: one default getter might sometimes override, sometimes not. Example in comment on ticket.
- if (member.is(Synthetic) && desugar.isDesugaredCaseClassMethodName(member.name)) // such names are added automatically, can't have an override preset.
+ if (autoOverride(member))
member.setFlag(Override)
else if (member.owner != clazz && other.owner != clazz && !(other.owner derivesFrom member.owner))
emitOverrideError(