Skip to content

Commit de5df36

Browse files
committed
Fix trait setter to getter lookup.
1 parent 11de1d3 commit de5df36

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

compiler/src/dotty/tools/dotc/transform/Memoize.scala

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,19 @@ class Memoize extends MiniPhase with IdentityDenotTransformer { thisPhase =>
118118
EmptyTree
119119
}
120120

121+
def traitSetterGetter: Symbol =
122+
/* We have to compare SimpleNames here, because the setter name only
123+
* embed the original getter's simple name, not its semantic name.
124+
*/
125+
val getterSimpleName = sym.asTerm.name.getterName
126+
sym.owner.info.decls.find { getter =>
127+
getter.is(Accessor) && getter.asTerm.name.toSimpleName == getterSimpleName
128+
}
129+
121130
val constantFinalVal = sym.isAllOf(Accessor | Final, butNot = Mutable) && tree.rhs.isInstanceOf[Literal]
122131

123132
if (sym.is(Accessor, butNot = NoFieldNeeded) && !constantFinalVal
124-
&& (!sym.name.is(TraitSetterName) || sym.getter.is(Accessor, butNot = NoFieldNeeded))) {
133+
&& (!sym.name.is(TraitSetterName) || traitSetterGetter.is(Accessor, butNot = NoFieldNeeded))) {
125134
val field = sym.field.orElse(newField).asTerm
126135

127136
def adaptToField(tree: Tree): Tree =

0 commit comments

Comments
 (0)