Skip to content

Commit e404bd9

Browse files
committed
Allow implementing deferred members by export aliases
So far, this gave a "member already exists" error. Also, fix info of type export aliases.
1 parent c28e5c2 commit e404bd9

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

compiler/src/dotty/tools/dotc/typer/Namer.scala

+3-2
Original file line numberDiff line numberDiff line change
@@ -949,7 +949,8 @@ class Namer { typer: Typer =>
949949
if (sym.is(ImplicitOrImplied) != exp.impliedOnly) s"is ${if (exp.impliedOnly) "not " else ""}implied"
950950
else if (!sym.isAccessibleFrom(path.tpe)) "is not accessible"
951951
else if (sym.isConstructor || sym.is(ModuleClass) || sym.is(Bridge)) "_"
952-
else if (cls.derivesFrom(sym.owner)) i"is already a member of $cls"
952+
else if (cls.derivesFrom(sym.owner) &&
953+
(sym.owner == cls || !sym.is(Deferred))) i"is already a member of $cls"
953954
else ""
954955
}
955956

@@ -965,7 +966,7 @@ class Namer { typer: Typer =>
965966
case _: ClassInfo =>
966967
HKTypeLambda.fromParams(info.typeParams, ref)
967968
case _: TypeBounds =>
968-
ref
969+
TypeAlias(ref)
969970
case info: HKTypeLambda =>
970971
info.derivedLambdaType(info.paramNames, info.paramInfos,
971972
fwdInfo(ref.appliedTo(info.paramRefs), info.resultType))

tests/pos/export-proxies.scala

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
trait Session{
2+
def call1(): Unit
3+
def call2(): Unit
4+
def call3(): Unit
5+
type T
6+
}
7+
8+
class SessionProxy(val session:Session) extends Session {
9+
export session.{call2, call3, T}
10+
11+
def call1(): Unit = {
12+
println("call1")
13+
session.call1()
14+
}
15+
}

0 commit comments

Comments
 (0)