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 @@ -1600,6 +1600,11 @@ class Typer extends Namer
1600
1600
var result = if (isTreeType(tree)) typedType(tree)(superCtx) else typedExpr(tree)(superCtx)
1601
1601
val psym = result.tpe.dealias.typeSymbol
1602
1602
if (seenParents.contains(psym) && ! cls.isRefinementClass) {
1603
+ // Desugaring can adds parents to classes, but we don't want to emit an
1604
+ // error if the same parent was explicitly added in user code.
1605
+ if (! tree.span.isSourceDerived)
1606
+ return EmptyTree
1607
+
1603
1608
if (! ctx.isAfterTyper) ctx.error(i " $psym is extended twice " , tree.sourcePos)
1604
1609
}
1605
1610
else seenParents += psym
@@ -1634,7 +1639,7 @@ class Typer extends Namer
1634
1639
1635
1640
completeAnnotations(cdef, cls)
1636
1641
val constr1 = typed(constr).asInstanceOf [DefDef ]
1637
- val parentsWithClass = ensureFirstTreeIsClass(parents mapconserve typedParent, cdef.nameSpan)
1642
+ val parentsWithClass = ensureFirstTreeIsClass(parents. mapconserve( typedParent).filterConserve( ! _.isEmpty) , cdef.nameSpan)
1638
1643
val parents1 = ensureConstrCall(cls, parentsWithClass)(superCtx)
1639
1644
1640
1645
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