summaryrefslogtreecommitdiff
path: root/test/files/neg/variances.scala
diff options
context:
space:
mode:
Diffstat (limited to 'test/files/neg/variances.scala')
-rw-r--r--test/files/neg/variances.scala56
1 files changed, 56 insertions, 0 deletions
diff --git a/test/files/neg/variances.scala b/test/files/neg/variances.scala
index 38d6617beb..f84ee8d5d5 100644
--- a/test/files/neg/variances.scala
+++ b/test/files/neg/variances.scala
@@ -1,5 +1,61 @@
+package test
+
trait Vector[+A] {
def append(x: Vector[A]): Vector[A]
private[this] def append3(x: Vector[A]): Vector[A] = append(x)
}
+class C[T]
+
+object Covariant {
+ class Foo[+A] {
+ private[this] var a : A = _
+ def getA : A = a
+ private[this] def setA(a : A) = this.a = a
+
+ object Baz extends C[A]
+ trait Convert[B] {
+ def b2a(b : B) : A
+ def doit(b : B) = setA(b2a(b))
+ }
+ }
+ class Foo2[+A] {
+ private[this] var a : A = _
+ def getA : A = a
+ private[this] def setA(a : A) = this.a = a
+
+ {
+ trait Convert[B] {
+ def b2a(b : B) : A
+ def doit(b : B) = setA(b2a(b))
+ }
+ ()
+ }
+ }
+ class Foo3[+A] {
+ private[this] var a : A = _
+ def getA : A = a
+ private[this] def setA(a : A) = this.a = a
+
+ private[this] trait Convert[B] {
+ def b2a(b : B) : A
+ def doit(b : B) = setA(b2a(b))
+ }
+ }
+ abstract class AbstractTest {
+ val a : Foo[AnyRef]
+ val c = new a.Convert[Int] {
+ def b2a(b : Int) : AnyRef = "hello"
+ }
+ val b : Int = 42
+ }
+ class Test extends AbstractTest {
+ val a : Foo[Character] = new Foo[Character]
+ }
+ def main(args : Array[String]) : Unit = {
+ val test = new Test
+ test.c.doit(test.b)
+ val x : Character = test.a.getA
+ Console.println("XXX " + x)
+ }
+}