diff options
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 11 | ||||
-rw-r--r-- | test/files/neg/caseinherit.check | 10 | ||||
-rw-r--r-- | test/files/neg/caseinherit.flags | 1 | ||||
-rw-r--r-- | test/files/neg/caseinherit.scala | 6 |
4 files changed, 23 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index 649af74d43..cf28ea24fe 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -1011,12 +1011,13 @@ trait Typers extends Modes { // "change your code now!" as there are material bugs (which are very unlikely // to be fixed) associated with case class inheritance. if (!phase.erasedTypes) { - for (ancestor <- clazz.ancestors find (_.isCase)) + for (ancestor <- clazz.ancestors find (_.isCase)) { unit.deprecationWarning(clazz.pos, ( - "case class `%s' has case class ancestor `%s'. This has been deprecated " + - "for unduly complicating both usage and implementation. You should instead " + - "use extractors for pattern matching on non-leaf nodes." ).format(clazz, ancestor) - ) + "case class `%s' has case ancestor `%s'. Case inheritance has potentially "+ + "dangerous bugs which are unlikely to be fixed. You are strongly encouraged to "+ + "instead use extractors to pattern match on non-leaf nodes." + ).format(clazz, ancestor)) + } } } diff --git a/test/files/neg/caseinherit.check b/test/files/neg/caseinherit.check new file mode 100644 index 0000000000..c0886cb7ff --- /dev/null +++ b/test/files/neg/caseinherit.check @@ -0,0 +1,10 @@ +caseinherit.scala:2: error: case class `class B' has case ancestor `class A'. Case inheritance has potentially dangerous bugs which are unlikely to be fixed. You are strongly encouraged to instead use extractors to pattern match on non-leaf nodes. +case class B(y: Int) extends A(y) + ^ +caseinherit.scala:3: error: case class `object Bippy' has case ancestor `class A'. Case inheritance has potentially dangerous bugs which are unlikely to be fixed. You are strongly encouraged to instead use extractors to pattern match on non-leaf nodes. +case object Bippy extends A(55) + ^ +caseinherit.scala:6: error: case class `class Dingus' has case ancestor `class A'. Case inheritance has potentially dangerous bugs which are unlikely to be fixed. You are strongly encouraged to instead use extractors to pattern match on non-leaf nodes. +case class Dingus(y: Int) extends Innocent + ^ +three errors found diff --git a/test/files/neg/caseinherit.flags b/test/files/neg/caseinherit.flags new file mode 100644 index 0000000000..e8fb65d50c --- /dev/null +++ b/test/files/neg/caseinherit.flags @@ -0,0 +1 @@ +-Xfatal-warnings
\ No newline at end of file diff --git a/test/files/neg/caseinherit.scala b/test/files/neg/caseinherit.scala new file mode 100644 index 0000000000..fdac97c98e --- /dev/null +++ b/test/files/neg/caseinherit.scala @@ -0,0 +1,6 @@ +case class A(x: Int) +case class B(y: Int) extends A(y) +case object Bippy extends A(55) + +class Innocent extends A(5) +case class Dingus(y: Int) extends Innocent
\ No newline at end of file |