Skip to content

Commit cfef033

Browse files
Use getter resultType
1 parent 087b47e commit cfef033

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

compiler/src/dotty/tools/backend/jvm/BCodeHelpers.scala

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -397,13 +397,10 @@ trait BCodeHelpers extends BCodeIdiomatic {
397397
atPhase(erasurePhase) {
398398
val memberTpe =
399399
if (sym.is(Method)) sym.denot.info
400-
else
401-
val sym0 =
402-
if sym.isField && sym.denot.validFor.phaseId > erasurePhase.id then
403-
sym.getter.orElse(sym)
404-
else
405-
sym
406-
owner.denot.thisType.memberInfo(sym0)
400+
else if sym.denot.validFor.phaseId > erasurePhase.id && sym.isField && sym.getter.exists then
401+
// Memoization field of getter entered after erasure, see run/i16069 for an example
402+
sym.getter.denot.info.resultType
403+
else owner.denot.thisType.memberInfo(sym)
407404
getGenericSignatureHelper(sym, owner, memberTpe).orNull
408405
}
409406
}

tests/run/17069.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,8 @@
1+
12
class Foo:
23
val generic: List[String] = ???
4+
5+
@main def Test =
6+
val tpe = classOf[Foo].getDeclaredField("generic").getGenericType()
7+
val tpe2 = classOf[Foo].getDeclaredMethod("generic").getGenericReturnType()
8+
assert(tpe == tpe2)

0 commit comments

Comments
 (0)