aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dotty/tools/dotc/Main.scala1
-rw-r--r--src/dotty/tools/dotc/typer/Namer.scala21
2 files changed, 12 insertions, 10 deletions
diff --git a/src/dotty/tools/dotc/Main.scala b/src/dotty/tools/dotc/Main.scala
index f4da16a6a..22d6d46b8 100644
--- a/src/dotty/tools/dotc/Main.scala
+++ b/src/dotty/tools/dotc/Main.scala
@@ -13,7 +13,6 @@ import reporting.Reporter
* - make use of AndOrType
* - review isSubType
* - have a second look at normalization (leave at method types if pt is method type?)
- * - fix problem with duplicate companion objects for classes with default parameters in constructors
* - Check usages of isAliasType and replace where possible by looking at the info.
* - Don't open package objects from class files if they are present in source
*/
diff --git a/src/dotty/tools/dotc/typer/Namer.scala b/src/dotty/tools/dotc/typer/Namer.scala
index 2433c49b5..952c7997e 100644
--- a/src/dotty/tools/dotc/typer/Namer.scala
+++ b/src/dotty/tools/dotc/typer/Namer.scala
@@ -298,19 +298,22 @@ class Namer { typer: Typer =>
* and the real companion, if both exist.
*/
def mergeCompanionDefs() = {
- val caseClassDef = mutable.Map[TypeName, TypeDef]()
+ val classDef = mutable.Map[TypeName, TypeDef]()
for (cdef @ TypeDef(mods, name, _) <- stats)
- if (mods is Case) caseClassDef(name) = cdef
+ if (cdef.isClassDef) classDef(name) = cdef
for (mdef @ ModuleDef(_, name, _) <- stats)
- caseClassDef get name.toTypeName match {
+ classDef get name.toTypeName match {
case Some(cdef) =>
val Thicket(vdef :: (mcls @ TypeDef(_, _, impl: Template)) :: Nil) = expandedTree(mdef)
- val Thicket(cls :: mval :: TypeDef(_, _, compimpl: Template) :: crest) = expandedTree(cdef)
- val mcls1 = cpy.TypeDef(mcls, mcls.mods, mcls.name,
- cpy.Template(impl, impl.constr, impl.parents, impl.self,
- compimpl.body ++ impl.body))
- expandedTree(mdef) = Thicket(vdef :: mcls1 :: Nil)
- expandedTree(cdef) = Thicket(cls :: crest)
+ expandedTree(cdef) match {
+ case Thicket(cls :: mval :: TypeDef(_, _, compimpl: Template) :: crest) =>
+ val mcls1 = cpy.TypeDef(mcls, mcls.mods, mcls.name,
+ cpy.Template(impl, impl.constr, impl.parents, impl.self,
+ compimpl.body ++ impl.body))
+ expandedTree(mdef) = Thicket(vdef :: mcls1 :: Nil)
+ expandedTree(cdef) = Thicket(cls :: crest)
+ case _ =>
+ }
case none =>
}
}