From 1839369a65f4c9d9b076ed657b7c40b5a4418154 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Thu, 11 Feb 2016 09:35:09 +0100 Subject: Only remove synthetic companion objects If the object was explicitly written, it might be referenced, even if it is empty. --- src/dotty/tools/dotc/core/Flags.scala | 1 + src/dotty/tools/dotc/transform/DropEmptyCompanions.scala | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/dotty/tools/dotc/core/Flags.scala b/src/dotty/tools/dotc/core/Flags.scala index 8c9db3a5c..02b341649 100644 --- a/src/dotty/tools/dotc/core/Flags.scala +++ b/src/dotty/tools/dotc/core/Flags.scala @@ -606,6 +606,7 @@ object Flags { final val AbstractFinal = allOf(Abstract, Final) final val AbstractSealed = allOf(Abstract, Sealed) final val SyntheticArtifact = allOf(Synthetic, Artifact) + final val SyntheticModule = allOf(Synthetic, Module) final val SyntheticTermParam = allOf(Synthetic, TermParam) final val SyntheticTypeParam = allOf(Synthetic, TypeParam) final val SyntheticCase = allOf(Synthetic, Case) diff --git a/src/dotty/tools/dotc/transform/DropEmptyCompanions.scala b/src/dotty/tools/dotc/transform/DropEmptyCompanions.scala index 05296d93e..71aa92e79 100644 --- a/src/dotty/tools/dotc/transform/DropEmptyCompanions.scala +++ b/src/dotty/tools/dotc/transform/DropEmptyCompanions.scala @@ -26,10 +26,12 @@ class DropEmptyCompanions extends MiniPhase { thisTransform => /** Is `tree` an empty companion object? */ private def isEmptyCompanion(tree: Tree)(implicit ctx: Context) = tree match { - case TypeDef(_, impl: Template) => - tree.symbol.is(Module) && + case TypeDef(_, impl: Template) if + tree.symbol.is(SyntheticModule) && tree.symbol.companionClass.exists && - impl.body.forall(_.symbol.isPrimaryConstructor) + impl.body.forall(_.symbol.isPrimaryConstructor) => + //println(i"removing ${tree.symbol}") + true case _ => false } -- cgit v1.2.3