diff options
Diffstat (limited to 'src/dotty/tools/dotc/transform/LazyVals.scala')
-rw-r--r-- | src/dotty/tools/dotc/transform/LazyVals.scala | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/transform/LazyVals.scala b/src/dotty/tools/dotc/transform/LazyVals.scala index 4a8ff83ca..2aece0663 100644 --- a/src/dotty/tools/dotc/transform/LazyVals.scala +++ b/src/dotty/tools/dotc/transform/LazyVals.scala @@ -1,6 +1,7 @@ package dotty.tools.dotc package transform +import dotty.tools.dotc.core.Phases.NeedsCompanions import dotty.tools.dotc.typer.Mode import scala.collection.mutable @@ -23,7 +24,7 @@ import dotty.tools.dotc.core.SymDenotations.SymDenotation import dotty.tools.dotc.core.DenotTransformers.{SymTransformer, IdentityDenotTransformer, DenotTransformer} import Erasure.Boxing.adaptToType -class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer { +class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer with NeedsCompanions { import LazyVals._ import tpd._ @@ -46,6 +47,11 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer { * before this phase starts processing same tree */ override def runsAfter = Set(classOf[Mixin]) + def isCompanionNeeded(cls: ClassSymbol)(implicit ctx: Context): Boolean = { + def hasLazyVal(x: ClassSymbol) = x.classInfo.membersBasedOnFlags(Flags.Lazy, excludedFlags = Flags.EmptyFlags).nonEmpty + hasLazyVal(cls) || cls.mixins.exists(hasLazyVal) + } + override def transformDefDef(tree: tpd.DefDef)(implicit ctx: Context, info: TransformerInfo): tpd.Tree = transformLazyVal(tree) |