@@ -126,7 +126,7 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
126
126
127
127
if (sym.is(Accessor , butNot = Deferred ) && ownerIsTrait) {
128
128
val sym1 =
129
- if (sym.is(Lazy )) sym
129
+ if (sym.is(Lazy ) || sym.symbol.isConstExprFinalVal ) sym
130
130
else sym.copySymDenotation(initFlags = sym.flags &~ (ParamAccessor | Inline ) | Deferred )
131
131
sym1.ensureNotPrivate
132
132
}
@@ -166,7 +166,7 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
166
166
private def needsTraitSetter (sym : Symbol )(using Context ): Boolean =
167
167
sym.isGetter && ! wasOneOf(sym, DeferredOrLazy | ParamAccessor )
168
168
&& atPhase(thisPhase) { ! sym.setter.exists }
169
- && ! sym.info.resultType. isInstanceOf [ ConstantType ]
169
+ && ! sym.isConstExprFinalVal
170
170
171
171
private def makeTraitSetter (getter : TermSymbol )(using Context ): Symbol =
172
172
getter.copy(
@@ -251,7 +251,10 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
251
251
cls.srcPos)
252
252
EmptyTree
253
253
254
- for (getter <- mixin.info.decls.toList if getter.isGetter && ! wasOneOf(getter, Deferred )) yield {
254
+ for
255
+ getter <- mixin.info.decls.toList
256
+ if getter.isGetter && ! wasOneOf(getter, Deferred ) && ! getter.isConstExprFinalVal
257
+ yield
255
258
if (isCurrent(getter) || getter.name.is(ExpandedName )) {
256
259
val rhs =
257
260
if (wasOneOf(getter, ParamAccessor ))
@@ -266,7 +269,6 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
266
269
transformFollowing(DefDef (mkForwarderSym(getter.asTerm), rhs))
267
270
}
268
271
else EmptyTree
269
- }
270
272
}
271
273
272
274
def setters (mixin : ClassSymbol ): List [Tree ] =
0 commit comments