@@ -119,18 +119,18 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
119119 override def relaxedTypingInGroup : Boolean = true
120120 // Because it changes number of parameters in trait initializers
121121
122- override def runsAfter : Set [String ] = Set (Erasure .name)
122+ override def runsAfter : Set [String ] = Set (Erasure .name, PrepareMixin .name )
123123
124124 override def changesMembers : Boolean = true // the phase adds implementions of mixin accessors
125125
126126 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)) {
128128 val sym1 =
129129 if (sym.is(Lazy)) sym
130130 else sym.copySymDenotation(initFlags = sym.flags &~ ParamAccessor | Deferred)
131131 sym1.ensureNotPrivate
132132 }
133- else if (sym.isConstructor && sym.owner.is(Trait ))
133+ else*/ if (sym.isConstructor && sym.owner.is(Trait ))
134134 sym.copySymDenotation(
135135 name = nme.TRAIT_CONSTRUCTOR ,
136136 info = MethodType (Nil , sym.info.resultType))
@@ -139,8 +139,10 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
139139 val decls1 = classInfo.decls.cloneScope
140140 var modified : Boolean = false
141141 for (getter <- classInfo.decls)
142+ // System.err.println(s"trait getter ${getter.fullName}")
142143 if needsTraitSetter(getter) then
143144 val setter = makeTraitSetter(getter.asTerm)
145+ // System.err.println(s"create trait setter ${setter.fullName}")
144146 decls1.enter(setter)
145147 modified = true
146148 if modified then
@@ -168,9 +170,14 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
168170 }.asTerm
169171
170172 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) }
172174
173175 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])*/
174181 sym.isGetter && ! wasOneOf(sym, DeferredOrLazy | ParamAccessor ) && ! sym.setter.exists
175182 && ! sym.info.resultType.isInstanceOf [ConstantType ]
176183
0 commit comments