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 @@ -1606,6 +1606,11 @@ class Typer extends Namer
1606
1606
var result = if (isTreeType(tree)) typedType(tree)(superCtx) else typedExpr(tree)(superCtx)
1607
1607
val psym = result.tpe.dealias.typeSymbol
1608
1608
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
+
1609
1614
if (! ctx.isAfterTyper) ctx.error(i " $psym is extended twice " , tree.sourcePos)
1610
1615
}
1611
1616
else seenParents += psym
@@ -1640,7 +1645,7 @@ class Typer extends Namer
1640
1645
1641
1646
completeAnnotations(cdef, cls)
1642
1647
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)
1644
1649
val parents1 = ensureConstrCall(cls, parentsWithClass)(superCtx)
1645
1650
1646
1651
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