@@ -122,7 +122,7 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
122
122
override def changesMembers : Boolean = true // the phase adds implementions of mixin accessors
123
123
124
124
override def transformSym (sym : SymDenotation )(using Context ): SymDenotation =
125
- def ownerIsTrait : Boolean = wasOneOf (sym.owner, Trait )
125
+ def ownerIsTrait : Boolean = was (sym.owner, Trait , butNot = JavaDefined )
126
126
127
127
if (sym.is(Accessor , butNot = Deferred ) && ownerIsTrait) {
128
128
val sym1 =
@@ -140,7 +140,7 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
140
140
info = MethodType (Nil , sym.info.resultType))
141
141
else if sym.is(Trait , butNot = JavaDefined ) then
142
142
val classInfo = sym.asClass.classInfo
143
- val decls1 = classInfo.decls.cloneScope
143
+ lazy val decls1 = classInfo.decls.cloneScope
144
144
var modified : Boolean = false
145
145
for (decl <- classInfo.decls)
146
146
// !decl.isClass avoids forcing nested traits, preventing cycles
@@ -160,6 +160,9 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
160
160
private def wasOneOf (sym : Symbol , flags : FlagSet )(using Context ): Boolean =
161
161
atPhase(thisPhase) { sym.isOneOf(flags) }
162
162
163
+ private def was (sym : Symbol , flag : Flag , butNot : FlagSet )(using Context ): Boolean =
164
+ atPhase(thisPhase) { sym.is(flag, butNot) }
165
+
163
166
private def needsTraitSetter (sym : Symbol )(using Context ): Boolean =
164
167
sym.isGetter && ! wasOneOf(sym, DeferredOrLazy | ParamAccessor )
165
168
&& atPhase(thisPhase) { ! sym.setter.exists }
0 commit comments