diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-06-16 17:52:01 +0200 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-06-16 17:52:01 +0200 |
commit | 797bfd74b0900d18d62082b842f6a330ce414ebd (patch) | |
tree | 54f7a7c21ab86f798d6484973e5409e4c16939e4 | |
parent | 0129468dca4127a6dcdd49b98c7f5060b441b027 (diff) | |
download | dotty-797bfd74b0900d18d62082b842f6a330ce414ebd.tar.gz dotty-797bfd74b0900d18d62082b842f6a330ce414ebd.tar.bz2 dotty-797bfd74b0900d18d62082b842f6a330ce414ebd.zip |
Scala2 mixin: For some lazy vals inside traits, Lazy flag isn't set on implementation method.
Cannot rely on it. Instead use method signature.
-rw-r--r-- | src/dotty/tools/dotc/transform/Mixin.scala | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/transform/Mixin.scala b/src/dotty/tools/dotc/transform/Mixin.scala index 4f7119c07..8562f4f02 100644 --- a/src/dotty/tools/dotc/transform/Mixin.scala +++ b/src/dotty/tools/dotc/transform/Mixin.scala @@ -166,8 +166,10 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform => DefDef(implementation(getter.asTerm), if (isScala2x) { if (getter.is(Flags.Lazy)) { // lazy vals need to have a rhs that will be the lazy initializer - val reciever = ref(mixin.implClass) - val sym = reciever.tpe.widen.nonPrivateDecl(getter.name).suchThat(_.is(Lazy)).symbol // lazy val can be overloaded + val sym = mixin.implClass.info.nonPrivateDecl(getter.name).suchThat(_.info.paramTypess match { + case List(List(t: TypeRef)) => t.isDirectRef(mixin) + case _ => false + }).symbol // lazy val can be overloaded ref(mixin.implClass).select(sym).appliedTo(This(ctx.owner.asClass)) } else default |