@@ -1176,20 +1176,21 @@ class Namer { typer: Typer =>
1176
1176
Yes
1177
1177
}
1178
1178
1179
- def foreachDefaultGetterOf (sym : TermSymbol , op : TermSymbol => Unit ): Unit =
1179
+ def foreachDefaultGetterOf (sym : TermSymbol , alias : TermName )( op : ( TermSymbol , TermName ) => Unit ): Unit =
1180
1180
var n = 0
1181
- val methodName =
1182
- if sym.name == nme.apply && sym.is(Synthetic ) && sym.owner.companionClass.is(Case ) then
1183
- // The synthesized `apply` methods of case classes use the constructor's default getters
1184
- nme.CONSTRUCTOR
1185
- else sym.name
1181
+ // The synthesized `apply` methods of case classes use the constructor's default getters
1182
+ val useConstructor = sym.name == nme.apply && sym.is(Synthetic ) && sym.owner.companionClass.is(Case )
1183
+ val methodName = if useConstructor then nme. CONSTRUCTOR else sym.name
1184
+ val aliasedName = if useConstructor then nme.CONSTRUCTOR else alias
1185
+ val useAliased = ! useConstructor && methodName != aliasedName
1186
1186
for params <- sym.paramSymss; param <- params do
1187
1187
if param.isTerm then
1188
1188
if param.is(HasDefault ) then
1189
1189
val getterName = DefaultGetterName (methodName, n)
1190
1190
val getter = pathType.member(getterName).symbol
1191
1191
assert(getter.exists, i " $path does not have a default getter named $getterName" )
1192
- op(getter.asTerm)
1192
+ val targetName = if useAliased then DefaultGetterName (aliasedName, n) else getterName
1193
+ op(getter.asTerm, targetName)
1193
1194
n += 1
1194
1195
1195
1196
/** Add a forwarder with name `alias` or its type name equivalent to `mbr`,
@@ -1310,9 +1311,8 @@ class Namer { typer: Typer =>
1310
1311
})
1311
1312
buf += ddef.withSpan(span)
1312
1313
if hasDefaults then
1313
- foreachDefaultGetterOf(sym.asTerm,
1314
- getter => addForwarder(
1315
- getter.name.asTermName, getter.asSeenFrom(path.tpe), span))
1314
+ foreachDefaultGetterOf(sym.asTerm, alias): (getter, getterName) =>
1315
+ addForwarder(getterName, getter.asSeenFrom(path.tpe), span)
1316
1316
1317
1317
// adding annotations and flags at the parameter level
1318
1318
// TODO: This probably needs to be filtered to avoid adding some annotation
@@ -1367,13 +1367,13 @@ class Namer { typer: Typer =>
1367
1367
addWildcardForwardersNamed(alias, span)
1368
1368
1369
1369
def addForwarders (sels : List [untpd.ImportSelector ], seen : List [TermName ]): Unit = sels match
1370
- case sel :: sels1 =>
1370
+ case sel :: sels =>
1371
1371
if sel.isWildcard then
1372
1372
addWildcardForwarders(seen, sel.span)
1373
1373
else
1374
1374
if sel.rename != nme.WILDCARD then
1375
1375
addForwardersNamed(sel.name, sel.rename, sel.span)
1376
- addForwarders(sels1 , sel.name :: seen)
1376
+ addForwarders(sels , sel.name :: seen)
1377
1377
case _ =>
1378
1378
1379
1379
/** Avoid a clash of export forwarder `forwarder` with other forwarders in `forwarders`.
0 commit comments