From edc11744685fe7c439c97c6d0588561580f79fc7 Mon Sep 17 00:00:00 2001 From: Martin Duhem Date: Tue, 9 Feb 2016 15:28:35 +0100 Subject: [PATCH] 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. --- .../{A.scala => changes/A0.scala} | 0 .../changes/{A.scala => A1.scala} | 0 .../trait-private-var/changes/A2.scala | 5 ++++ .../trait-private-var/test | 26 ++++++++++++++----- 4 files changed, 25 insertions(+), 6 deletions(-) rename sbt/src/sbt-test/source-dependencies/trait-private-var/{A.scala => changes/A0.scala} (100%) rename sbt/src/sbt-test/source-dependencies/trait-private-var/changes/{A.scala => A1.scala} (100%) create mode 100644 sbt/src/sbt-test/source-dependencies/trait-private-var/changes/A2.scala diff --git a/sbt/src/sbt-test/source-dependencies/trait-private-var/A.scala b/sbt/src/sbt-test/source-dependencies/trait-private-var/changes/A0.scala similarity index 100% rename from sbt/src/sbt-test/source-dependencies/trait-private-var/A.scala rename to sbt/src/sbt-test/source-dependencies/trait-private-var/changes/A0.scala diff --git a/sbt/src/sbt-test/source-dependencies/trait-private-var/changes/A.scala b/sbt/src/sbt-test/source-dependencies/trait-private-var/changes/A1.scala similarity index 100% rename from sbt/src/sbt-test/source-dependencies/trait-private-var/changes/A.scala rename to sbt/src/sbt-test/source-dependencies/trait-private-var/changes/A1.scala diff --git a/sbt/src/sbt-test/source-dependencies/trait-private-var/changes/A2.scala b/sbt/src/sbt-test/source-dependencies/trait-private-var/changes/A2.scala new file mode 100644 index 000000000..60641457d --- /dev/null +++ b/sbt/src/sbt-test/source-dependencies/trait-private-var/changes/A2.scala @@ -0,0 +1,5 @@ +trait A { + private val foo = 12 + // we need to access foo to trigger AbstractMethodError + def bar: Int = foo +} diff --git a/sbt/src/sbt-test/source-dependencies/trait-private-var/test b/sbt/src/sbt-test/source-dependencies/trait-private-var/test index d928246a9..c120697d8 100644 --- a/sbt/src/sbt-test/source-dependencies/trait-private-var/test +++ b/sbt/src/sbt-test/source-dependencies/trait-private-var/test @@ -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