aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/RefChecks.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-03-30 12:16:03 +0200
committerMartin Odersky <odersky@gmail.com>2016-03-30 12:16:03 +0200
commitf675ad9507089f8b912357fab86740653c1b8789 (patch)
tree66d8e6c3775795ed017a292accd6a4d146009e88 /src/dotty/tools/dotc/typer/RefChecks.scala
parentd89767858c4e3a7ad37d9a98ea1e87f58bd0eb02 (diff)
downloaddotty-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/dotty/tools/dotc/typer/RefChecks.scala')
-rw-r--r--src/dotty/tools/dotc/typer/RefChecks.scala5
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()
}