Add a pending test case for private var declared in a trait.

Added a test-case for an edge case where an introduction of private member
(var in this case) should trigger recompilation of all classes that
inherit from a trait where the member is declared.

The reason is that current encoding of traits make it impossible for them
to declare fields directly so fields are being introduced in classes
inheriting from those traits. Check the test case for details.
This commit is contained in:
Grzegorz Kossakowski 2013-03-03 23:48:08 -08:00 committed by Mark Harrah
parent 925ec98900
commit c6b0043336
4 changed files with 25 additions and 0 deletions

View File

@ -0,0 +1,3 @@
trait A {
def bar: Int = 0
}

View File

@ -0,0 +1,3 @@
object B extends A {
def main(args: Array[String]): Unit = println(bar)
}

View File

@ -0,0 +1,5 @@
trait A {
private var foo = 12
// we need to access foo to trigger AbstractMethodError
def bar: Int = foo
}

View File

@ -0,0 +1,14 @@
# compile and run for the first time to verify that everything works
> run
# introduce private var and refer to it in a trait that we inherit from
# there'll be pair of getters and setters generated for private var that
# has to be implemented by a class (where you can declare corresponding field)
$ copy-file changes/A.scala A.scala
# this fails with AbstractMethodError because getters and setters for
# a private var are not generated because introduction of a private var
# does not trigger recompilation of B
# B is not recompiled because incremental compiler tracks only public
# interace (members visible from outside of given trait/class)
> run