summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-12-18 15:22:11 +0000
committerMartin Odersky <odersky@gmail.com>2009-12-18 15:22:11 +0000
commit7ddabed25a5e559d660a9de53ddf2a3ddabf209c (patch)
treedfb1ca7a34efb815850175ad8659bb944340354d
parent70ed6680a571b0ca0cae338b4af1fe965116ab61 (diff)
downloadscala-7ddabed25a5e559d660a9de53ddf2a3ddabf209c.tar.gz
scala-7ddabed25a5e559d660a9de53ddf2a3ddabf209c.tar.bz2
scala-7ddabed25a5e559d660a9de53ddf2a3ddabf209c.zip
Closed #2801.
-rw-r--r--src/actors/scala/actors/ReactorTask.scala2
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Types.scala2
-rw-r--r--src/swing/scala/swing/UIElement.scala2
-rw-r--r--test/files/neg/t2801.check6
-rw-r--r--test/files/neg/t2801.scala3
-rw-r--r--test/files/pos/t2794.scala2
6 files changed, 13 insertions, 4 deletions
diff --git a/src/actors/scala/actors/ReactorTask.scala b/src/actors/scala/actors/ReactorTask.scala
index 8fde0e4aea..28e93bbbff 100644
--- a/src/actors/scala/actors/ReactorTask.scala
+++ b/src/actors/scala/actors/ReactorTask.scala
@@ -20,7 +20,7 @@ import java.util.concurrent.Callable
*
* @author Philipp Haller
*/
-private[actors] class ReactorTask[T <: Reactor](var reactor: T, var fun: () => Unit)
+private[actors] class ReactorTask[T >: Null <: Reactor](var reactor: T, var fun: () => Unit)
extends Callable[Unit] with Runnable {
def run() {
diff --git a/src/compiler/scala/tools/nsc/symtab/Types.scala b/src/compiler/scala/tools/nsc/symtab/Types.scala
index 24abef8944..513ed34ff9 100644
--- a/src/compiler/scala/tools/nsc/symtab/Types.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Types.scala
@@ -4188,7 +4188,7 @@ A type's typeSymbol should never be inspected directly.
} else if (sym1 == NullClass) {
tp2 match {
case TypeRef(_, sym2, _) =>
- (sym2 isNonBottomSubClass ObjectClass) &&
+ sym2.isClass && (sym2 isNonBottomSubClass ObjectClass) &&
!(tp2.normalize.typeSymbol isNonBottomSubClass NotNullClass)
case _ =>
isSingleType(tp2) && tp1 <:< tp2.widen
diff --git a/src/swing/scala/swing/UIElement.scala b/src/swing/scala/swing/UIElement.scala
index bff294d641..8a661626f4 100644
--- a/src/swing/scala/swing/UIElement.scala
+++ b/src/swing/scala/swing/UIElement.scala
@@ -32,7 +32,7 @@ object UIElement {
* it will return that wrapper. Otherwise it returns `null`. This
* method never throws an exception.
*/
- private[swing] def cachedWrapper[C<:UIElement](c: java.awt.Component): C = {
+ private[swing] def cachedWrapper[C>:Null<:UIElement](c: java.awt.Component): C = {
val w = c match {
case c: javax.swing.JComponent => c.getClientProperty(ClientKey)
case _ => wrapperCache.get(c)
diff --git a/test/files/neg/t2801.check b/test/files/neg/t2801.check
new file mode 100644
index 0000000000..25320de5bc
--- /dev/null
+++ b/test/files/neg/t2801.check
@@ -0,0 +1,6 @@
+t2801.scala:2: error: type mismatch;
+ found : Null(null)
+ required: A
+ def f[A <: AnyRef] = { val a: A = null ; a }
+ ^
+one error found
diff --git a/test/files/neg/t2801.scala b/test/files/neg/t2801.scala
new file mode 100644
index 0000000000..d425f58b56
--- /dev/null
+++ b/test/files/neg/t2801.scala
@@ -0,0 +1,3 @@
+object Test {
+ def f[A <: AnyRef] = { val a: A = null ; a }
+}
diff --git a/test/files/pos/t2794.scala b/test/files/pos/t2794.scala
index caefea4fbb..a17edf8cb3 100644
--- a/test/files/pos/t2794.scala
+++ b/test/files/pos/t2794.scala
@@ -4,6 +4,6 @@ class Entry[T](val k: Key[T], val v: T)
object Entry {
- def makeDefault[T <: AnyRef] = new Entry[T](new Key[T], null: T)
+ def makeDefault[T >: Null <: AnyRef] = new Entry[T](new Key[T], null: T)
}