summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-06-29 16:59:10 +0000
committerPaul Phillips <paulp@improving.org>2011-06-29 16:59:10 +0000
commitfdfdd09d51f5ad3ee30e525145001f02959e3899 (patch)
treed82571210dc11a000cc15d6b17bda35b58bdee78 /test
parent72a095dcdc84a988c61835d8115fd2738caa5127 (diff)
downloadscala-fdfdd09d51f5ad3ee30e525145001f02959e3899.tar.gz
scala-fdfdd09d51f5ad3ee30e525145001f02959e3899.tar.bz2
scala-fdfdd09d51f5ad3ee30e525145001f02959e3899.zip
Warning! Warning! Yes, that's what's in this co...
Warning! Warning! Yes, that's what's in this commit. Why are you panicking? Mostly new command line options: -Xlint // basically, the ones which aren't noisy Ywarn-all -Ywarn-dead-code Ywarn-inaccessible // try this one on the library: -it makes some good points Ywarn-nullary-override Ywarn-nullary-unit -Ywarn-numeric-widen Ywarn-value-discard Some accumulated motivations: The wontfix resolution of ticket #4506 indicates that "def foo" and "def foo()" are always going to be treated differently in some situations and the same in others without users having any way to fix it. Summary expressed in latest comment with which I agree (and quite sadly, given that I've done a lot of work to try to make them usable) is "avoid using structural types like the plague." But the least we can do is warn if you're using parentheses "wrong". I think it would be better if the warning about "def foo()" overriding "def foo" were an error instead. If we have to live with this... trait Me { def f(): Int } class A { def f: Int = 5 } class C extends A with Me { } // error: Int does not take parameters def f(x: C) = x.f() // compiles def f(x: Me) = x.f() // error: Int does not take parameters. Mmph, how can a method be // legal with parameter "Foo" and illegal with parameter "Foo with // Bar" ? def f(x: Me with C) = x.f() The warning about a method contains a reference to a type which is less accessible than the method itself is obviously to those who recall it a response to GenTraversable being private and appearing in flatMap's signature during the 2.9.0 RCs. It avoids warning in the case where the unnormalized type is inaccessible but the normalized version would be, but it could use further refinement.
Diffstat (limited to 'test')
-rw-r--r--test/files/neg/abstract-inaccessible.check13
-rw-r--r--test/files/neg/abstract-inaccessible.flags1
-rw-r--r--test/files/neg/abstract-inaccessible.scala9
-rw-r--r--test/files/neg/bug4533.check4
-rw-r--r--test/files/neg/bug4533.scala8
-rw-r--r--test/files/neg/nullary-override.check4
-rw-r--r--test/files/neg/nullary-override.flags1
-rw-r--r--test/files/neg/nullary-override.scala3
8 files changed, 31 insertions, 12 deletions
diff --git a/test/files/neg/abstract-inaccessible.check b/test/files/neg/abstract-inaccessible.check
new file mode 100644
index 0000000000..42b98ac026
--- /dev/null
+++ b/test/files/neg/abstract-inaccessible.check
@@ -0,0 +1,13 @@
+abstract-inaccessible.scala:5: error: method implementMe in trait YourTrait references private[foo] trait Bippy.
+Classes which cannot access Bippy may be unable to provide a concrete implementation of implementMe.
+ def implementMe(f: Int => (String, Bippy)): Unit
+ ^
+abstract-inaccessible.scala:6: error: method overrideMe in trait YourTrait references private[foo] trait Bippy.
+Classes which cannot access Bippy may be unable to override overrideMe.
+ def overrideMe[T <: Bippy](x: T): T = x
+ ^
+abstract-inaccessible.scala:7: error: method overrideMeAlso in trait YourTrait references private[foo] trait Bippy.
+Classes which cannot access Bippy may be unable to override overrideMeAlso.
+ def overrideMeAlso(x: Map[Int, Set[Bippy]]) = 5
+ ^
+three errors found
diff --git a/test/files/neg/abstract-inaccessible.flags b/test/files/neg/abstract-inaccessible.flags
new file mode 100644
index 0000000000..6c1dd108ae
--- /dev/null
+++ b/test/files/neg/abstract-inaccessible.flags
@@ -0,0 +1 @@
+-Xfatal-warnings -Xlint \ No newline at end of file
diff --git a/test/files/neg/abstract-inaccessible.scala b/test/files/neg/abstract-inaccessible.scala
new file mode 100644
index 0000000000..3c80f30522
--- /dev/null
+++ b/test/files/neg/abstract-inaccessible.scala
@@ -0,0 +1,9 @@
+package foo {
+ private[foo] trait Bippy { }
+
+ trait YourTrait {
+ def implementMe(f: Int => (String, Bippy)): Unit
+ def overrideMe[T <: Bippy](x: T): T = x
+ def overrideMeAlso(x: Map[Int, Set[Bippy]]) = 5
+ }
+}
diff --git a/test/files/neg/bug4533.check b/test/files/neg/bug4533.check
deleted file mode 100644
index 0f50b5adb1..0000000000
--- a/test/files/neg/bug4533.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug4533.scala:6: error: wrong number of type arguments for scala.collection.GenSetLike, should be 2
- def statusByAlarms(alarms: GenSetLike[FooAlarm]) = println("hello")
- ^
-one error found
diff --git a/test/files/neg/bug4533.scala b/test/files/neg/bug4533.scala
deleted file mode 100644
index 425c958328..0000000000
--- a/test/files/neg/bug4533.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-package demo
-
-import scala.collection._
-
-class CrashDemo {
- def statusByAlarms(alarms: GenSetLike[FooAlarm]) = println("hello")
-}
-class FooAlarm { }
diff --git a/test/files/neg/nullary-override.check b/test/files/neg/nullary-override.check
new file mode 100644
index 0000000000..6b2ded2d4a
--- /dev/null
+++ b/test/files/neg/nullary-override.check
@@ -0,0 +1,4 @@
+nullary-override.scala:2: error: non-nullary method overrides nullary method
+class B extends A { override def x(): Int = 4 }
+ ^
+one error found
diff --git a/test/files/neg/nullary-override.flags b/test/files/neg/nullary-override.flags
new file mode 100644
index 0000000000..6c1dd108ae
--- /dev/null
+++ b/test/files/neg/nullary-override.flags
@@ -0,0 +1 @@
+-Xfatal-warnings -Xlint \ No newline at end of file
diff --git a/test/files/neg/nullary-override.scala b/test/files/neg/nullary-override.scala
new file mode 100644
index 0000000000..3eb4784a0c
--- /dev/null
+++ b/test/files/neg/nullary-override.scala
@@ -0,0 +1,3 @@
+class A { def x: Int = 3 }
+class B extends A { override def x(): Int = 4 }
+