File tree Expand file tree Collapse file tree 3 files changed +22
-1
lines changed
compiler/src/dotty/tools/dotc/typer Expand file tree Collapse file tree 3 files changed +22
-1
lines changed Original file line number Diff line number Diff line change @@ -1606,6 +1606,11 @@ class Typer extends Namer
16061606 var result = if (isTreeType(tree)) typedType(tree)(superCtx) else typedExpr(tree)(superCtx)
16071607 val psym = result.tpe.dealias.typeSymbol
16081608 if (seenParents.contains(psym) && ! cls.isRefinementClass) {
1609+ // Desugaring can adds parents to classes, but we don't want to emit an
1610+ // error if the same parent was explicitly added in user code.
1611+ if (! tree.span.isSourceDerived)
1612+ return EmptyTree
1613+
16091614 if (! ctx.isAfterTyper) ctx.error(i " $psym is extended twice " , tree.sourcePos)
16101615 }
16111616 else seenParents += psym
@@ -1640,7 +1645,7 @@ class Typer extends Namer
16401645
16411646 completeAnnotations(cdef, cls)
16421647 val constr1 = typed(constr).asInstanceOf [DefDef ]
1643- val parentsWithClass = ensureFirstTreeIsClass(parents mapconserve typedParent, cdef.nameSpan)
1648+ val parentsWithClass = ensureFirstTreeIsClass(parents. mapconserve( typedParent).filterConserve( ! _.isEmpty) , cdef.nameSpan)
16441649 val parents1 = ensureConstrCall(cls, parentsWithClass)(superCtx)
16451650
16461651 var self1 = typed(self)(ctx.outer).asInstanceOf [ValDef ] // outer context where class members are not visible
Original file line number Diff line number Diff line change 1+ case class Foo1 (x : Int ) extends Serializable with Serializable // error
2+ case class Foo2 (x : Int ) extends scala.Serializable with Serializable // error
Original file line number Diff line number Diff line change 1+ case class Foo1 (x : Int ) extends Serializable
2+ case class Foo2 (x : Int ) extends scala.Serializable
3+ case class Foo3 (x : Int ) extends Product
4+
5+ case object Foo4 extends Serializable
6+
7+ object Scope {
8+ class Serializable
9+ case class Foo5 (x : Int ) extends Serializable
10+
11+ val f = Foo5 (1 )
12+ f : Scope .Serializable
13+ f : scala.Serializable
14+ }
You can’t perform that action at this time.
0 commit comments