diff options
author | Paul Phillips <paulp@improving.org> | 2011-04-28 16:23:45 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-04-28 16:23:45 +0000 |
commit | 199ec3c10fe7d2b2029ea8ae6a19240b46181435 (patch) | |
tree | f0e7b14111510f19bf89874d3073adf767d16054 /test | |
parent | 9a9f73b80261415e08eb782333470bbb84863894 (diff) | |
download | scala-199ec3c10fe7d2b2029ea8ae6a19240b46181435.tar.gz scala-199ec3c10fe7d2b2029ea8ae6a19240b46181435.tar.bz2 scala-199ec3c10fe7d2b2029ea8ae6a19240b46181435.zip |
Improved the error message for another of the m...
Improved the error message for another of the most common situations
I hear about in newbieland. It could be taken further. If compilation
fails due to an unimplemented abstract method, and there is a concrete
method of the same name and arity, it will do a pairwise analysis of the
parameters and attempt to further explain where you went off the beam if
it feels it can do so sensibly. Such as in the test case:
% scalac S.scala
S.scala:1: error: class S needs to be abstract, since method g in class J of type (y: Int,z: java.util.List)Int is not defined
(Note that java.util.List does not match java.util.List[String]. To implement a raw type, use java.util.List[_])
class S extends J {
^
one error found
No review.
Diffstat (limited to 'test')
-rw-r--r-- | test/files/neg/abstract-class-2.check | 5 | ||||
-rw-r--r-- | test/files/neg/abstract-class-2.scala | 14 | ||||
-rw-r--r-- | test/files/neg/abstract-class-error.check | 5 | ||||
-rw-r--r-- | test/files/neg/abstract-class-error/J.java | 4 | ||||
-rw-r--r-- | test/files/neg/abstract-class-error/S.scala | 4 |
5 files changed, 32 insertions, 0 deletions
diff --git a/test/files/neg/abstract-class-2.check b/test/files/neg/abstract-class-2.check new file mode 100644 index 0000000000..ca79dd8293 --- /dev/null +++ b/test/files/neg/abstract-class-2.check @@ -0,0 +1,5 @@ +abstract-class-2.scala:11: error: object creation impossible, since method f in trait S2 of type (x: P2.this.p.S1)Int is not defined +(Note that P.this.p.S1 does not match P2.this.S1: their prefixes (i.e. enclosing instances) differ) + object O2 extends S2 { + ^ +one error found diff --git a/test/files/neg/abstract-class-2.scala b/test/files/neg/abstract-class-2.scala new file mode 100644 index 0000000000..19f74f3da6 --- /dev/null +++ b/test/files/neg/abstract-class-2.scala @@ -0,0 +1,14 @@ +class P { + trait S1 + val p = new P + + trait S2 { + def f(x: p.S1): Int + } +} + +class P2 extends P { + object O2 extends S2 { + def f(x: S1) = 5 + } +} diff --git a/test/files/neg/abstract-class-error.check b/test/files/neg/abstract-class-error.check new file mode 100644 index 0000000000..b8a0c6e70b --- /dev/null +++ b/test/files/neg/abstract-class-error.check @@ -0,0 +1,5 @@ +S.scala:1: error: class S needs to be abstract, since method g in class J of type (y: Int,z: java.util.List)Int is not defined +(Note that java.util.List does not match java.util.List[String]. To implement a raw type, use java.util.List[_]) +class S extends J { + ^ +one error found diff --git a/test/files/neg/abstract-class-error/J.java b/test/files/neg/abstract-class-error/J.java new file mode 100644 index 0000000000..5877f5cc5b --- /dev/null +++ b/test/files/neg/abstract-class-error/J.java @@ -0,0 +1,4 @@ +public abstract class J { + public abstract int f(); + public abstract int g(int y, java.util.List z); +}
\ No newline at end of file diff --git a/test/files/neg/abstract-class-error/S.scala b/test/files/neg/abstract-class-error/S.scala new file mode 100644 index 0000000000..67f6d8593e --- /dev/null +++ b/test/files/neg/abstract-class-error/S.scala @@ -0,0 +1,4 @@ +class S extends J { + def f() = 55 + def g(y: Int, z: java.util.List[String]) = 11 +} |