Skip to content

Commit 319d3d2

Browse files
committed
clarify: all trait vals receive accessors
those that wouldn't are synthesized later anyway -- right?
1 parent a4aa44e commit 319d3d2

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

src/compiler/scala/tools/nsc/typechecker/Namers.scala

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,14 @@ trait Namers extends MethodSynthesis {
117117
}
118118

119119
// All lazy vals need accessors, including those owned by terms (e.g., in method) or private[this] in a class
120-
def deriveAccessors(vd: ValDef) = vd.mods.isLazy || (owner.isClass && deriveAccessorsInClass(vd))
120+
def deriveAccessors(vd: ValDef) = (vd.mods.isLazy ||
121+
owner.isTrait && { assert(!(vd.name startsWith nme.OUTER) && !isEnumConstant(vd), s"deriveAccessors invar fail for $vd"); true }
122+
|| (owner.isClass && deriveAccessorsInClass(vd))
123+
)
124+
121125

122126
private def deriveAccessorsInClass(vd: ValDef) =
123-
(!vd.mods.isPrivateLocal || owner.isTrait) && // note, private[this] lazy vals do get accessors -- see outer disjunction of deriveAccessors
127+
!vd.mods.isPrivateLocal && // note, private[this] lazy vals do get accessors -- see outer disjunction of deriveAccessors
124128
!(vd.name startsWith nme.OUTER) && // outer accessors are added later, in explicitouter
125129
!isEnumConstant(vd) // enums can only occur in classes, so only check here
126130

0 commit comments

Comments
 (0)