@@ -126,7 +126,7 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
126126
127127 if (sym.is(Accessor , butNot = Deferred ) && ownerIsTrait) {
128128 val sym1 =
129- if (sym.is(Lazy )) sym
129+ if (sym.is(Lazy ) || sym.symbol.isConstExprFinalVal ) sym
130130 else sym.copySymDenotation(initFlags = sym.flags &~ (ParamAccessor | Inline ) | Deferred )
131131 sym1.ensureNotPrivate
132132 }
@@ -166,7 +166,7 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
166166 private def needsTraitSetter (sym : Symbol )(using Context ): Boolean =
167167 sym.isGetter && ! wasOneOf(sym, DeferredOrLazy | ParamAccessor )
168168 && atPhase(thisPhase) { ! sym.setter.exists }
169- && ! sym.info.resultType. isInstanceOf [ ConstantType ]
169+ && ! sym.isConstExprFinalVal
170170
171171 private def makeTraitSetter (getter : TermSymbol )(using Context ): Symbol =
172172 getter.copy(
@@ -251,7 +251,10 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
251251 cls.srcPos)
252252 EmptyTree
253253
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
255258 if (isCurrent(getter) || getter.name.is(ExpandedName )) {
256259 val rhs =
257260 if (wasOneOf(getter, ParamAccessor ))
@@ -266,7 +269,6 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
266269 transformFollowing(DefDef (mkForwarderSym(getter.asTerm), rhs))
267270 }
268271 else EmptyTree
269- }
270272 }
271273
272274 def setters (mixin : ClassSymbol ): List [Tree ] =
0 commit comments