@@ -119,18 +119,18 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
119
119
override def relaxedTypingInGroup : Boolean = true
120
120
// Because it changes number of parameters in trait initializers
121
121
122
- override def runsAfter : Set [String ] = Set (Erasure .name)
122
+ override def runsAfter : Set [String ] = Set (Erasure .name, PrepareMixin .name )
123
123
124
124
override def changesMembers : Boolean = true // the phase adds implementions of mixin accessors
125
125
126
126
override def transformSym (sym : SymDenotation )(implicit ctx : Context ): SymDenotation =
127
- if (sym.is(Accessor , butNot = Deferred ) && sym.owner.is(Trait )) {
127
+ /* if (sym.is(Accessor, butNot = Deferred) && sym.owner.is(Trait)) {
128
128
val sym1 =
129
129
if (sym.is(Lazy)) sym
130
130
else sym.copySymDenotation(initFlags = sym.flags &~ ParamAccessor | Deferred)
131
131
sym1.ensureNotPrivate
132
132
}
133
- else if (sym.isConstructor && sym.owner.is(Trait ))
133
+ else*/ if (sym.isConstructor && sym.owner.is(Trait ))
134
134
sym.copySymDenotation(
135
135
name = nme.TRAIT_CONSTRUCTOR ,
136
136
info = MethodType (Nil , sym.info.resultType))
@@ -139,8 +139,10 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
139
139
val decls1 = classInfo.decls.cloneScope
140
140
var modified : Boolean = false
141
141
for (getter <- classInfo.decls)
142
+ // System.err.println(s"trait getter ${getter.fullName}")
142
143
if needsTraitSetter(getter) then
143
144
val setter = makeTraitSetter(getter.asTerm)
145
+ // System.err.println(s"create trait setter ${setter.fullName}")
144
146
decls1.enter(setter)
145
147
modified = true
146
148
if modified then
@@ -168,9 +170,14 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
168
170
}.asTerm
169
171
170
172
private def wasOneOf (sym : Symbol , flags : FlagSet )(implicit ctx : Context ): Boolean =
171
- ctx.atPhase(thisPhase) { sym.isOneOf(flags) }
173
+ ctx.atPhase(thisPhase.prev ) { sym.isOneOf(flags) }
172
174
173
175
private def needsTraitSetter (sym : Symbol )(implicit ctx : Context ): Boolean =
176
+ /* System.err.println(" " + sym.isGetter)
177
+ if sym.isGetter then
178
+ System.err.println(" " + !wasOneOf(sym, DeferredOrLazy | ParamAccessor))
179
+ System.err.println(" " + !sym.setter.exists)
180
+ System.err.println(" " + !sym.info.resultType.isInstanceOf[ConstantType])*/
174
181
sym.isGetter && ! wasOneOf(sym, DeferredOrLazy | ParamAccessor ) && ! sym.setter.exists
175
182
&& ! sym.info.resultType.isInstanceOf [ConstantType ]
176
183
0 commit comments