@@ -182,8 +182,8 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
182
182
}
183
183
}
184
184
185
- def wasDeferred (sym : Symbol ) =
186
- ctx.atPhase(thisTransform) { implicit ctx => sym is Deferred }
185
+ def was (sym : Symbol , flags : FlagSet ) =
186
+ ctx.atPhase(thisTransform) { implicit ctx => sym is flags }
187
187
188
188
def traitInits (mixin : ClassSymbol ): List [Tree ] = {
189
189
var argNum = 0
@@ -202,7 +202,7 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
202
202
EmptyTree
203
203
}
204
204
205
- for (getter <- mixin.info.decls.filter(getr => getr .isGetter && ! wasDeferred(getr)).toList ) yield {
205
+ for (getter <- mixin.info.decls.toList if getter .isGetter && ! was(getter, Deferred ) ) yield {
206
206
val isScala2x = mixin.is(Scala2x )
207
207
def default = Underscore (getter.info.resultType)
208
208
def initial = transformFollowing(superRef(initializer(getter)).appliedToNone)
@@ -220,23 +220,23 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
220
220
221
221
if (isCurrent(getter) || getter.is(ExpandedName )) {
222
222
val rhs =
223
- if (ctx.atPhase(thisTransform)( implicit ctx => getter.is( ParamAccessor ) )) nextArgument()
223
+ if (was( getter, ParamAccessor )) nextArgument()
224
224
else if (isScala2x)
225
225
if (getter.is(Lazy , butNot = Module )) lazyGetterCall
226
226
else if (getter.is(Module ))
227
227
New (getter.info.resultType, List (This (cls)))
228
228
else Underscore (getter.info.resultType)
229
- else transformFollowing(superRef(initializer(getter)).appliedToNone)
229
+ else initial
230
230
// transformFollowing call is needed to make memoize & lazy vals run
231
231
transformFollowing(DefDef (implementation(getter.asTerm), rhs))
232
232
}
233
- else if (isScala2x) EmptyTree
233
+ else if (isScala2x || was(getter, ParamAccessor ) ) EmptyTree
234
234
else initial
235
235
}
236
236
}
237
237
238
238
def setters (mixin : ClassSymbol ): List [Tree ] =
239
- for (setter <- mixin.info.decls.filter(setr => setr.isSetter && ! wasDeferred (setr)).toList)
239
+ for (setter <- mixin.info.decls.filter(setr => setr.isSetter && ! was (setr, Deferred )).toList)
240
240
yield transformFollowing(DefDef (implementation(setter.asTerm), unitLiteral.withPos(cls.pos)))
241
241
242
242
cpy.Template (impl)(
0 commit comments