File tree 3 files changed +22
-1
lines changed
compiler/src/dotty/tools/dotc/typer
3 files changed +22
-1
lines changed Original file line number Diff line number Diff line change @@ -1596,6 +1596,11 @@ class Typer extends Namer
1596
1596
var result = if (tree.isType) typedType(tree)(superCtx) else typedExpr(tree)(superCtx)
1597
1597
val psym = result.tpe.dealias.typeSymbol
1598
1598
if (seenParents.contains(psym) && ! cls.isRefinementClass) {
1599
+ // Desugaring can adds parents to classes, but we don't want to emit an
1600
+ // error if the same parent was explicitly added in user code.
1601
+ if (! tree.span.isSourceDerived)
1602
+ return EmptyTree
1603
+
1599
1604
if (! ctx.isAfterTyper) ctx.error(i " $psym is extended twice " , tree.sourcePos)
1600
1605
}
1601
1606
else seenParents += psym
@@ -1630,7 +1635,7 @@ class Typer extends Namer
1630
1635
1631
1636
completeAnnotations(cdef, cls)
1632
1637
val constr1 = typed(constr).asInstanceOf [DefDef ]
1633
- val parentsWithClass = ensureFirstTreeIsClass(parents mapconserve typedParent, cdef.nameSpan)
1638
+ val parentsWithClass = ensureFirstTreeIsClass(parents. mapconserve( typedParent).filterConserve( ! _.isEmpty) , cdef.nameSpan)
1634
1639
val parents1 = ensureConstrCall(cls, parentsWithClass)(superCtx)
1635
1640
1636
1641
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