aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-03-10 11:30:34 +0100
committerMartin Odersky <odersky@gmail.com>2016-03-10 11:30:48 +0100
commitb6daa2a522e88cfb70776b66301b65ed6d0205f6 (patch)
treee71dc0d7da962b2d1f6a2c962b8d438c7ba3f862
parentff8731041a522b73fde6bddd2d7077d19d35b6b0 (diff)
downloaddotty-b6daa2a522e88cfb70776b66301b65ed6d0205f6.tar.gz
dotty-b6daa2a522e88cfb70776b66301b65ed6d0205f6.tar.bz2
dotty-b6daa2a522e88cfb70776b66301b65ed6d0205f6.zip
Make sure lazy accessors in traits are not private.
Fixes #1140. Review by @DarkDimius or @smarter.
-rw-r--r--src/dotty/tools/dotc/transform/Mixin.scala8
-rw-r--r--tests/run/i1140/A_1.scala4
-rw-r--r--tests/run/i1140/B_2.scala5
3 files changed, 15 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/transform/Mixin.scala b/src/dotty/tools/dotc/transform/Mixin.scala
index 32b268fc7..fc82caf65 100644
--- a/src/dotty/tools/dotc/transform/Mixin.scala
+++ b/src/dotty/tools/dotc/transform/Mixin.scala
@@ -98,8 +98,12 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
override def runsAfter: Set[Class[_ <: Phase]] = Set(classOf[Erasure])
override def transformSym(sym: SymDenotation)(implicit ctx: Context): SymDenotation =
- if (sym.is(Accessor, butNot = Deferred | Lazy) && sym.owner.is(Trait))
- sym.copySymDenotation(initFlags = sym.flags &~ ParamAccessor | Deferred).ensureNotPrivate
+ if (sym.is(Accessor, butNot = Deferred) && sym.owner.is(Trait)) {
+ val sym1 =
+ if (sym is Lazy) sym
+ else sym.copySymDenotation(initFlags = sym.flags &~ ParamAccessor | Deferred)
+ sym1.ensureNotPrivate
+ }
else if (sym.isConstructor && sym.owner.is(Trait))
sym.copySymDenotation(
name = nme.TRAIT_CONSTRUCTOR,
diff --git a/tests/run/i1140/A_1.scala b/tests/run/i1140/A_1.scala
new file mode 100644
index 000000000..e16a8162d
--- /dev/null
+++ b/tests/run/i1140/A_1.scala
@@ -0,0 +1,4 @@
+trait A {
+ val foo = 0 + x
+ private lazy val x = 1
+}
diff --git a/tests/run/i1140/B_2.scala b/tests/run/i1140/B_2.scala
new file mode 100644
index 000000000..aa576c256
--- /dev/null
+++ b/tests/run/i1140/B_2.scala
@@ -0,0 +1,5 @@
+object Test extends A {
+ def main(args: Array[String]): Unit = {
+ assert(foo == 1)
+ }
+}