From 05af0a361815a0ca438a9af94981aa7001bc6d6c Mon Sep 17 00:00:00 2001 From: Dmitry Petrashko Date: Mon, 17 Aug 2015 15:49:44 +0200 Subject: All non-deferred Scala2 defined methods in traits need a method in implClass. As one can call them either indirectly through mixin composition or directly through super[Mixin].foo --- src/dotty/tools/dotc/core/Flags.scala | 1 + src/dotty/tools/dotc/transform/AugmentScala2Traits.scala | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'src/dotty/tools') diff --git a/src/dotty/tools/dotc/core/Flags.scala b/src/dotty/tools/dotc/core/Flags.scala index 161c8fde3..0ab68ce29 100644 --- a/src/dotty/tools/dotc/core/Flags.scala +++ b/src/dotty/tools/dotc/core/Flags.scala @@ -598,6 +598,7 @@ object Flags { final val SyntheticTypeParam = allOf(Synthetic, TypeParam) final val SyntheticCase = allOf(Synthetic, Case) final val AbstractAndOverride = allOf(Abstract, Override) + final val Scala2Trait = allOf(Scala2x, Trait) implicit def conjToFlagSet(conj: FlagConjunction): FlagSet = FlagSet(conj.bits) diff --git a/src/dotty/tools/dotc/transform/AugmentScala2Traits.scala b/src/dotty/tools/dotc/transform/AugmentScala2Traits.scala index 60f59cfed..e3cad0819 100644 --- a/src/dotty/tools/dotc/transform/AugmentScala2Traits.scala +++ b/src/dotty/tools/dotc/transform/AugmentScala2Traits.scala @@ -79,7 +79,7 @@ class AugmentScala2Traits extends MiniPhaseTransform with IdentityDenotTransform info = MethodType(getter.info.resultType :: Nil, defn.UnitType)) for (sym <- mixin.info.decls) { - if (needsForwarder(sym) || sym.isConstructor || sym.isGetter && sym.is(Lazy)) + if (needsForwarder(sym) || sym.isConstructor || sym.isGetter && sym.is(Lazy) || sym.is(Method, butNot = Deferred)) implClass.enter(implMethod(sym.asTerm)) if (sym.isGetter) if (sym.is(Lazy)) { -- cgit v1.2.3