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