summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala11
-rw-r--r--test/files/neg/caseinherit.check10
-rw-r--r--test/files/neg/caseinherit.flags1
-rw-r--r--test/files/neg/caseinherit.scala6
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