aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/RefChecks.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-12-10 15:37:37 +0100
committerMartin Odersky <odersky@gmail.com>2015-12-14 14:30:09 +0100
commit3476bab33e9509963fd02aab10b4db3b891c9a85 (patch)
tree44ed2633e7af264f4980b387422eeb05d3ff2504 /src/dotty/tools/dotc/typer/RefChecks.scala
parentc4238b13b3eb89abeac49aa814313c9adc75599c (diff)
downloaddotty-3476bab33e9509963fd02aab10b4db3b891c9a85.tar.gz
dotty-3476bab33e9509963fd02aab10b4db3b891c9a85.tar.bz2
dotty-3476bab33e9509963fd02aab10b4db3b891c9a85.zip
Better diagnostics for clashing classes
We do not allow same-named class members in supertraits of a mixin composition anymore. This commit gives a better error message and avoids a crash in RefChecks.
Diffstat (limited to 'src/dotty/tools/dotc/typer/RefChecks.scala')
-rw-r--r--src/dotty/tools/dotc/typer/RefChecks.scala19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/dotty/tools/dotc/typer/RefChecks.scala b/src/dotty/tools/dotc/typer/RefChecks.scala
index 3ffbb8079..416a2cb92 100644
--- a/src/dotty/tools/dotc/typer/RefChecks.scala
+++ b/src/dotty/tools/dotc/typer/RefChecks.scala
@@ -15,6 +15,7 @@ import TreeTransforms._
import util.DotClass
import scala.util.{Try, Success, Failure}
import config.{ScalaVersion, NoScalaVersion}
+import Decorators._
import typer.ErrorReporting._
import DenotTransformers._
import ValueClasses.isDerivedValueClass
@@ -340,10 +341,20 @@ object RefChecks {
}*/
}
- val opc = new OverridingPairs.Cursor(clazz)
- while (opc.hasNext) {
- checkOverride(opc.overriding, opc.overridden)
- opc.next()
+ try {
+ val opc = new OverridingPairs.Cursor(clazz)
+ while (opc.hasNext) {
+ checkOverride(opc.overriding, opc.overridden)
+ opc.next()
+ }
+ } catch {
+ case ex: MergeError =>
+ val addendum = ex.tp1 match {
+ case tp1: ClassInfo =>
+ "\n(Note that having same-named member classes in types of a mixin composition is no longer allowed)"
+ case _ => ""
+ }
+ ctx.error(ex.getMessage + addendum, clazz.pos)
}
printMixinOverrideErrors()