diff options
author | Martin Odersky <odersky@gmail.com> | 2016-03-30 12:16:03 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-03-30 12:16:03 +0200 |
commit | f675ad9507089f8b912357fab86740653c1b8789 (patch) | |
tree | 66d8e6c3775795ed017a292accd6a4d146009e88 /src | |
parent | d89767858c4e3a7ad37d9a98ea1e87f58bd0eb02 (diff) | |
download | dotty-f675ad9507089f8b912357fab86740653c1b8789.tar.gz dotty-f675ad9507089f8b912357fab86740653c1b8789.tar.bz2 dotty-f675ad9507089f8b912357fab86740653c1b8789.zip |
Domain checking for named type parameters
Now verifies that the named type parameters of an overriding
type or class are the same as the named type parameters of
an overridden type.
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/dotc/typer/RefChecks.scala | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/typer/RefChecks.scala b/src/dotty/tools/dotc/typer/RefChecks.scala index afbb43faf..37c2fe48f 100644 --- a/src/dotty/tools/dotc/typer/RefChecks.scala +++ b/src/dotty/tools/dotc/typer/RefChecks.scala @@ -246,6 +246,8 @@ object RefChecks { isDefaultGetter(member.name) || // default getters are not checked for compatibility memberTp.overrides(otherTp) + def domain(sym: Symbol): Set[Name] = sym.info.namedTypeParams.map(_.name) + //Console.println(infoString(member) + " overrides " + infoString(other) + " in " + clazz);//DEBUG // return if we already checked this combination elsewhere @@ -342,6 +344,9 @@ object RefChecks { overrideError("cannot be used here - only term macros can override term macros") } else if (!compatibleTypes) { overrideError("has incompatible type" + err.whyNoMatchStr(memberTp, otherTp)) + } else if (member.isType && domain(member) != domain(other)) { + overrideError("has different named type parameters: "+ + i"[${domain(member).toList}%, %] instead of [${domain(other).toList}%, %]") } else { checkOverrideDeprecated() } |