Skip to content

Commit e52535f

Browse files
committed
Always generate bridges in traits - makes the trait-bridge-signatures.play reproducer compliant with Java counterpart
1 parent 2d69f6d commit e52535f

File tree

3 files changed

+15
-25
lines changed

3 files changed

+15
-25
lines changed

compiler/src/dotty/tools/dotc/transform/Bridges.scala

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,11 @@ class Bridges(root: ClassSymbol, thisPhase: DenotTransformer)(using Context) {
5151
*/
5252
private class TraitBridgesCursor(using Context) extends BridgesCursor{
5353
override protected def prioritizeDeferred: Boolean = false
54+
5455
// Get full list of parents to deduplicate already defined bridges in the parents
5556
override lazy val parents: Array[Symbol] =
5657
root.info.parents.map(_.classSymbol).toArray
5758

58-
override protected def matches(sym: Symbol, overriden: Symbol): Boolean =
59-
def resultType(sym: Symbol) = sym.info.finalResultType.typeSymbol
60-
def consistentParams = sym.signature.consistentParams(overriden.signature)
61-
def overridesAbstractResultType = resultType(overriden).isAbstractOrParamType
62-
consistentParams && !overridesAbstractResultType && super.matches(sym, overriden)
63-
6459
override def exclude(sym: Symbol) =
6560
!sym.isPublic || super.exclude(sym)
6661
}
@@ -194,12 +189,13 @@ class Bridges(root: ClassSymbol, thisPhase: DenotTransformer)(using Context) {
194189
* time deferred methods in `stats` that are replaced by a bridge with the same signature.
195190
*/
196191
def add(stats: List[untpd.Tree]): List[untpd.Tree] =
192+
val forTrait = root.is(Trait)
197193
val opc = inContext(preErasureCtx) {
198-
if (root.is(Trait)) new TraitBridgesCursor
199-
else new BridgesCursor
194+
if forTrait then TraitBridgesCursor()
195+
else BridgesCursor()
200196
}
201197
while opc.hasNext do
202-
if !opc.overriding.is(Deferred) then
198+
if forTrait || !opc.overriding.is(Deferred) then
203199
addBridgeIfNeeded(opc.overriding, opc.overridden)
204200
opc.next()
205201
if bridges.isEmpty then stats

tests/run/mixin-signatures.check

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,27 +49,23 @@ class Test$bar5$ {
4949
}
5050

5151
interface Foo1 {
52-
public abstract java.lang.Object Base.f(java.lang.Object)
53-
generic: public abstract R Base.f(T)
5452
public default java.lang.String Foo1.f(java.lang.Object)
5553
generic: public default java.lang.String Foo1.f(T)
56-
public abstract java.lang.Object Base.g(java.lang.Object)
57-
generic: public abstract R Base.g(T)
54+
public default java.lang.Object Foo1.f(java.lang.Object) <bridge> <synthetic>
5855
public abstract java.lang.String Foo1.g(java.lang.Object)
5956
generic: public abstract java.lang.String Foo1.g(T)
57+
public default java.lang.Object Foo1.g(java.lang.Object) <bridge> <synthetic>
6058
public default java.lang.Object Base.h(java.lang.Object)
6159
generic: public default R Base.h(T)
6260
}
6361

6462
interface Foo2 {
65-
public abstract java.lang.Object Base.f(java.lang.Object)
66-
generic: public abstract R Base.f(T)
6763
public default java.lang.Object Foo2.f(java.lang.String)
6864
generic: public default R Foo2.f(java.lang.String)
69-
public abstract java.lang.Object Base.g(java.lang.Object)
70-
generic: public abstract R Base.g(T)
65+
public default java.lang.Object Foo2.f(java.lang.Object) <bridge> <synthetic>
7166
public abstract java.lang.Object Foo2.g(java.lang.String)
7267
generic: public abstract R Foo2.g(java.lang.String)
68+
public default java.lang.Object Foo2.g(java.lang.Object) <bridge> <synthetic>
7369
public default java.lang.Object Base.h(java.lang.Object)
7470
generic: public default R Base.h(T)
7571
}

tests/run/trait-bridge-signatures.check

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,15 @@ interface collections$LinearSeqOps {
2727
- generic: public abstract A collections$LinearSeqOps.head()
2828
public abstract collections$LinearSeq collections$LinearSeqOps.tail()
2929
- generic: public abstract C collections$LinearSeqOps.tail()
30-
public default java.lang.Object collections$IterableOps.tail()
31-
- generic: public default C collections$IterableOps.tail()
30+
public default java.lang.Object collections$LinearSeqOps.tail() <bridge> <synthetic>
3231
}
3332

3433
interface collections$LinearSeq {
3534
public abstract java.lang.Object collections$LinearSeqOps.head()
3635
- generic: public abstract A collections$LinearSeqOps.head()
3736
public abstract collections$LinearSeq collections$LinearSeqOps.tail()
3837
- generic: public abstract C collections$LinearSeqOps.tail()
39-
public default java.lang.Object collections$IterableOps.tail()
40-
- generic: public default C collections$IterableOps.tail()
38+
public default java.lang.Object collections$LinearSeqOps.tail() <bridge> <synthetic>
4139
}
4240

4341
interface collections$Iterable {
@@ -75,11 +73,11 @@ class EmptyCollection {
7573
interface play$WSRequest {
7674
public abstract play$WSRequest play$WSRequest.addCookies(scala.collection.immutable.Seq)
7775
- generic: public abstract play$WSRequest play$WSRequest.addCookies(scala.collection.immutable.Seq<play$WSCookie>)
78-
public default play$StandaloneWSRequest play$StandaloneWSRequest.addCookies(scala.collection.immutable.Seq)
79-
- generic: public default play$StandaloneWSRequest play$StandaloneWSRequest.addCookies(scala.collection.immutable.Seq<play$WSCookie>)
80-
public abstract play$StandaloneWSRequest play$StandaloneWSRequest.withCookies(scala.collection.immutable.Seq)
81-
- generic: public abstract play$StandaloneWSRequest play$StandaloneWSRequest.withCookies(scala.collection.immutable.Seq<play$WSCookie>)
76+
public default play$StandaloneWSRequest play$WSRequest.addCookies(scala.collection.immutable.Seq) <bridge> <synthetic>
77+
public static play$StandaloneWSRequest play$WSRequest.addCookies$(play$WSRequest,scala.collection.immutable.Seq)
8278
public abstract play$WSRequest play$WSRequest.withCookies(scala.collection.immutable.Seq)
8379
- generic: public abstract play$WSRequest play$WSRequest.withCookies(scala.collection.immutable.Seq<play$WSCookie>)
80+
public default play$StandaloneWSRequest play$WSRequest.withCookies(scala.collection.immutable.Seq) <bridge> <synthetic>
81+
public static play$StandaloneWSRequest play$WSRequest.withCookies$(play$WSRequest,scala.collection.immutable.Seq)
8482
}
8583

0 commit comments

Comments
 (0)