summaryrefslogtreecommitdiff
path: root/test/files/neg/variances.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-04-02 08:23:57 -0700
committerPaul Phillips <paulp@improving.org>2012-04-02 09:23:25 -0700
commit03f32bd22f85bf3a6f8824dbe4a7a989e717c071 (patch)
tree4befb2ee97185754d9db670494698c035aeea445 /test/files/neg/variances.scala
parentf7535f72903f083b2444fb1d0b73363efa5482e9 (diff)
downloadscala-03f32bd22f85bf3a6f8824dbe4a7a989e717c071.tar.gz
scala-03f32bd22f85bf3a6f8824dbe4a7a989e717c071.tar.bz2
scala-03f32bd22f85bf3a6f8824dbe4a7a989e717c071.zip
Fix for SI-3272.
"References to the type parameters in object-private or object-protected values, variables, or methods (ยง5.2) of the class are not checked for their variance position." Review by @odersky.
Diffstat (limited to 'test/files/neg/variances.scala')
-rw-r--r--test/files/neg/variances.scala29
1 files changed, 20 insertions, 9 deletions
diff --git a/test/files/neg/variances.scala b/test/files/neg/variances.scala
index 726bc35270..10ca111cd0 100644
--- a/test/files/neg/variances.scala
+++ b/test/files/neg/variances.scala
@@ -1,7 +1,7 @@
package test
trait Vector[+A] {
- def append(x: Vector[A]): Vector[A]
+ def append(x: Vector[A]): Vector[A]
private[this] def append3(x: Vector[A]): Vector[A] = append(x)
}
@@ -11,19 +11,27 @@ object Covariant {
class Foo[+A] {
private[this] var a : A = _
def getA : A = a
- private[this] def setA(a : A) = this.a = a
-
+ // allowed
+ private[this] def setA1(a : A) = this.a = a
+ protected[this] def setA2(a : A) = this.a = a
+ // forbidden
+ private def setA3(a : A) = this.a = a
+ protected def setA4(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))
+ def doit1(b : B) = setA1(b2a(b))
+ def doit2(b : B) = setA2(b2a(b))
+ def doit3(b : B) = setA3(b2a(b))
+ def doit4(b : B) = setA4(b2a(b))
}
}
class Foo2[+A] {
private[this] var a : A = _
def getA : A = a
- private[this] def setA(a : A) = this.a = a
-
+ private[this] def setA(a : A) = this.a = a
+
{
trait Convert[B] {
def b2a(b : B) : A
@@ -35,8 +43,8 @@ object Covariant {
class Foo3[+A] {
private[this] var a : A = _
def getA : A = a
- private[this] def setA(a : A) = this.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))
@@ -54,7 +62,10 @@ object Covariant {
}
def main(args : Array[String]) {
val test = new Test
- test.c.doit(test.b)
+ test.c.doit1(test.b)
+ test.c.doit2(test.b)
+ test.c.doit3(test.b)
+ test.c.doit4(test.b)
val x : java.lang.Character = test.a.getA
Console.println("XXX " + x)
}