Extend test `trait-private-var` with vals

Private vars and private vals defined in a trait impact the bytecode
generated for the implementors of these traits. The scripted test
`source-dependencies/trait-private-var` only accounted for private vars.

It now tries the same scenario both with private vars and private vals.
This commit is contained in:
Martin Duhem 2016-02-09 15:28:35 +01:00
parent 7d94251108
commit edc1174468
4 changed files with 25 additions and 6 deletions

View File

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

View File

@ -1,14 +1,28 @@
$ copy-file changes/A0.scala A.scala
# 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
$ copy-file changes/A1.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)
# If the introduction of a private var did not trigger the recompilation of B,
# then this will fail with AbstractMethodError because the getters and setters
# for the private var have not been generated.
> run
# Try again with a private val
> clean
$ copy-file changes/A0.scala A.scala
# compile and run a clean project to verify that everything works
> run
# introduce a private val in the trait
$ copy-file changes/A2.scala A.scala
# Verify that B has been recompiled and that everything runs fine.
> run