diff options
author | Martin Odersky <odersky@gmail.com> | 2016-03-10 11:30:34 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-03-10 11:30:48 +0100 |
commit | b6daa2a522e88cfb70776b66301b65ed6d0205f6 (patch) | |
tree | e71dc0d7da962b2d1f6a2c962b8d438c7ba3f862 | |
parent | ff8731041a522b73fde6bddd2d7077d19d35b6b0 (diff) | |
download | dotty-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.scala | 8 | ||||
-rw-r--r-- | tests/run/i1140/A_1.scala | 4 | ||||
-rw-r--r-- | tests/run/i1140/B_2.scala | 5 |
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) + } +} |