@@ -48,37 +48,29 @@ import Decorators._
48
48
case _ =>
49
49
}
50
50
51
- override def prepareForDefDef (tree : DefDef )(implicit ctx : Context ) = {
51
+ override def transformDefDef (tree : DefDef )(implicit ctx : Context , info : TransformerInfo ) : Tree = {
52
52
val sym = tree.symbol
53
- if (sym.isGetter && ! sym.is( NoFieldNeeded )) {
53
+ lazy val field = {
54
54
// allocate field early so that initializer has the right owner for subsequeny phases in
55
55
// the group.
56
56
val maybeMutable = if (sym is Stable ) EmptyFlags else Mutable
57
- val field = ctx.newSymbol(
57
+ val field = sym.field.orElse( ctx.newSymbol(
58
58
owner = ctx.owner,
59
59
name = sym.name.asTermName.fieldName,
60
60
flags = Private | maybeMutable,
61
61
info = sym.info.resultType,
62
- coord = tree.pos).enteredAfter(thisTransform)
63
- tree.rhs.changeOwnerAfter(sym, field, thisTransform)
64
- }
65
- this
66
- }
62
+ coord = tree.pos).enteredAfter(thisTransform))
67
63
68
- override def transformDefDef (tree : DefDef )(implicit ctx : Context , info : TransformerInfo ): Tree = {
69
- val sym = tree.symbol
70
- def field = {
71
- val field = sym.field.asTerm
72
- assert(field.exists, i " no field for ${sym.showLocated} in ${sym.owner.info.decls.toList.map{_.showDcl}}%; % " )
73
- field
64
+ field.asTerm
74
65
}
75
66
if (sym.is(Accessor , butNot = NoFieldNeeded ))
76
67
if (sym.isGetter) {
77
- val fieldDef = transformFollowing(ValDef (field, tree.rhs))
68
+ val fieldDef = transformFollowing(ValDef (field, tree.rhs.changeOwner(sym, field) ))
78
69
val getterDef = cpy.DefDef (tree)(rhs = transformFollowingDeep(ref(field)))
79
70
Thicket (fieldDef, getterDef)
80
71
}
81
72
else if (sym.isSetter) {
73
+ // @odersky, next line does nothing(except potential MatchError). is this intended?
82
74
if (! sym.is(ParamAccessor )) { val Literal (Constant (())) = tree.rhs }
83
75
val initializer = Assign (ref(field), ref(tree.vparamss.head.head.symbol))
84
76
cpy.DefDef (tree)(rhs = transformFollowingDeep(initializer))
0 commit comments