Skip to content

Commit 5f5b517

Browse files
Use constructor's default getters in case class synthetic apply methods (#18716)
Fixes #18715
2 parents e6242ca + ef14582 commit 5f5b517

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

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

+7-2
Original file line numberDiff line numberDiff line change
@@ -1139,11 +1139,16 @@ class Namer { typer: Typer =>
11391139

11401140
def foreachDefaultGetterOf(sym: TermSymbol, op: TermSymbol => Unit): Unit =
11411141
var n = 0
1142+
val methodName =
1143+
if sym.name == nme.apply && sym.is(Synthetic) && sym.owner.companionClass.is(Case) then
1144+
// The synthesized `apply` methods of case classes use the constructor's default getters
1145+
nme.CONSTRUCTOR
1146+
else sym.name
11421147
for params <- sym.paramSymss; param <- params do
11431148
if param.isTerm then
11441149
if param.is(HasDefault) then
1145-
val getterName = DefaultGetterName(sym.name, n)
1146-
val getter = pathType.member(DefaultGetterName(sym.name, n)).symbol
1150+
val getterName = DefaultGetterName(methodName, n)
1151+
val getter = pathType.member(getterName).symbol
11471152
assert(getter.exists, i"$path does not have a default getter named $getterName")
11481153
op(getter.asTerm)
11491154
n += 1

tests/pos/i18715.scala

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
case class Foo(x: Int = 0)
2+
3+
extension (x: Any)
4+
private def foo = Foo
5+
export foo.apply

0 commit comments

Comments
 (0)