From 797bfd74b0900d18d62082b842f6a330ce414ebd Mon Sep 17 00:00:00 2001 From: Dmitry Petrashko Date: Tue, 16 Jun 2015 17:52:01 +0200 Subject: Scala2 mixin: For some lazy vals inside traits, Lazy flag isn't set on implementation method. Cannot rely on it. Instead use method signature. --- src/dotty/tools/dotc/transform/Mixin.scala | 6 ++++-- 1 file 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 -- cgit v1.2.3