Skip to content

Commit 3377de5

Browse files
committed
Fix #745, memoise should be able to get type of field from setter.
1 parent 7cfa2e1 commit 3377de5

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

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

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,20 @@ import Decorators._
4545
override def transformDefDef(tree: DefDef)(implicit ctx: Context, info: TransformerInfo): Tree = {
4646
val sym = tree.symbol
4747

48-
def newField = ctx.newSymbol(
49-
owner = ctx.owner,
50-
name = sym.name.asTermName.fieldName,
51-
flags = Private | (if (sym is Stable) EmptyFlags else Mutable),
52-
info = sym.info.resultType,
53-
coord = tree.pos)
54-
.withAnnotationsCarrying(sym, defn.FieldMetaAnnot)
55-
.enteredAfter(thisTransform)
48+
def newField = {
49+
val fieldType =
50+
if (sym.isGetter) sym.info.resultType
51+
else /*sym.isSetter*/ sym.info.firstParamTypes.head
52+
53+
ctx.newSymbol(
54+
owner = ctx.owner,
55+
name = sym.name.asTermName.fieldName,
56+
flags = Private | (if (sym is Stable) EmptyFlags else Mutable),
57+
info = fieldType,
58+
coord = tree.pos)
59+
.withAnnotationsCarrying(sym, defn.FieldMetaAnnot)
60+
.enteredAfter(thisTransform)
61+
}
5662

5763
/** Can be used to filter annotations on getters and setters; not used yet */
5864
def keepAnnotations(denot: SymDenotation, meta: ClassSymbol) = {

0 commit comments

Comments
 (0)