@@ -1223,20 +1223,21 @@ class Namer { typer: Typer =>
1223
1223
Yes
1224
1224
}
1225
1225
1226
- def foreachDefaultGetterOf (sym : TermSymbol , op : TermSymbol => Unit ): Unit =
1226
+ def foreachDefaultGetterOf (sym : TermSymbol , alias : TermName )( op : ( TermSymbol , TermName ) => Unit ): Unit =
1227
1227
var n = 0
1228
- val methodName =
1229
- if sym.name == nme.apply && sym.is(Synthetic ) && sym.owner.companionClass.is(Case ) then
1230
- // The synthesized `apply` methods of case classes use the constructor's default getters
1231
- nme.CONSTRUCTOR
1232
- else sym.name
1228
+ // The synthesized `apply` methods of case classes use the constructor's default getters
1229
+ val useConstructor = sym.name == nme.apply && sym.is(Synthetic ) && sym.owner.companionClass.is(Case )
1230
+ val methodName = if useConstructor then nme. CONSTRUCTOR else sym.name
1231
+ val aliasedName = if useConstructor then nme.CONSTRUCTOR else alias
1232
+ val useAliased = ! useConstructor && methodName != aliasedName
1233
1233
for params <- sym.paramSymss; param <- params do
1234
1234
if param.isTerm then
1235
1235
if param.is(HasDefault ) then
1236
1236
val getterName = DefaultGetterName (methodName, n)
1237
1237
val getter = pathType.member(getterName).symbol
1238
1238
assert(getter.exists, i " $path does not have a default getter named $getterName" )
1239
- op(getter.asTerm)
1239
+ val targetName = if useAliased then DefaultGetterName (aliasedName, n) else getterName
1240
+ op(getter.asTerm, targetName)
1240
1241
n += 1
1241
1242
1242
1243
/** Add a forwarder with name `alias` or its type name equivalent to `mbr`,
@@ -1358,9 +1359,8 @@ class Namer { typer: Typer =>
1358
1359
})
1359
1360
buf += ddef.withSpan(span)
1360
1361
if hasDefaults then
1361
- foreachDefaultGetterOf(sym.asTerm,
1362
- getter => addForwarder(
1363
- getter.name.asTermName, getter.asSeenFrom(path.tpe), span))
1362
+ foreachDefaultGetterOf(sym.asTerm, alias): (getter, getterName) =>
1363
+ addForwarder(getterName, getter.asSeenFrom(path.tpe), span)
1364
1364
1365
1365
// adding annotations and flags at the parameter level
1366
1366
// TODO: This probably needs to be filtered to avoid adding some annotation
@@ -1415,13 +1415,13 @@ class Namer { typer: Typer =>
1415
1415
addWildcardForwardersNamed(alias, span)
1416
1416
1417
1417
def addForwarders (sels : List [untpd.ImportSelector ], seen : List [TermName ]): Unit = sels match
1418
- case sel :: sels1 =>
1418
+ case sel :: sels =>
1419
1419
if sel.isWildcard then
1420
1420
addWildcardForwarders(seen, sel.span)
1421
1421
else
1422
1422
if ! sel.isUnimport then
1423
1423
addForwardersNamed(sel.name, sel.rename, sel.span)
1424
- addForwarders(sels1 , sel.name :: seen)
1424
+ addForwarders(sels , sel.name :: seen)
1425
1425
case _ =>
1426
1426
1427
1427
/** Avoid a clash of export forwarder `forwarder` with other forwarders in `forwarders`.
0 commit comments