From 66a316a4acdb2584ef9d85f15b950f12c94d909c Mon Sep 17 00:00:00 2001 From: Adriaan Moors Date: Wed, 2 Sep 2015 11:11:11 -0700 Subject: Streamline MethodSynthesis & Namers Give Getter control over whether a setter is needed. For now, only mutable ValDefs entail setters. In the new trait encoding, a trait val will also receive a setter from the start. Similarly, distinguish whether to derive a field from deferredness of the val. (Later, fields will not be emitted for traits, deferred or not.) --- src/compiler/scala/tools/nsc/typechecker/Namers.scala | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'src/compiler/scala/tools/nsc/typechecker/Namers.scala') diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala index 4ad81b60ae..f54b330284 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala @@ -118,7 +118,7 @@ trait Namers extends MethodSynthesis { // PRIVATE | LOCAL are fields generated for primary constructor arguments // @PP: ...or fields declared as private[this]. PARAMACCESSOR marks constructor arguments. // Neither gets accessors so the code is as far as I know still correct. - def noEnterGetterSetter(vd: ValDef) = !vd.mods.isLazy && ( + def deriveAccessors(vd: ValDef) = vd.mods.isLazy || !( !owner.isClass || (vd.mods.isPrivateLocal && !vd.mods.isCaseAccessor) || (vd.name startsWith nme.OUTER) @@ -126,7 +126,7 @@ trait Namers extends MethodSynthesis { || isEnumConstant(vd) ) - def noFinishGetterSetter(vd: ValDef) = ( + def deriveAccessorTrees(vd: ValDef) = !( (vd.mods.isPrivateLocal && !vd.mods.isLazy) // all lazy vals need accessors, even private[this] || vd.symbol.isModuleVar || isEnumConstant(vd)) @@ -656,10 +656,8 @@ trait Namers extends MethodSynthesis { } def enterValDef(tree: ValDef) { - if (noEnterGetterSetter(tree)) - assignAndEnterFinishedSymbol(tree) - else - enterGetterSetter(tree) + if (deriveAccessors(tree)) enterGetterSetter(tree) + else assignAndEnterFinishedSymbol(tree) if (isEnumConstant(tree)) tree.symbol setInfo ConstantType(Constant(tree.symbol)) -- cgit v1.2.3