diff options
author | Martin Odersky <odersky@gmail.com> | 2010-05-25 15:57:21 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2010-05-25 15:57:21 +0000 |
commit | bb83cb8ba76643d3e8de9d34351efbd4fc963f84 (patch) | |
tree | 5ce8fdb8cb47bfd179b62c9a76659b74bac1f95c | |
parent | 885f76fd054d5e71202112bae75c313bbad269ab (diff) | |
download | scala-bb83cb8ba76643d3e8de9d34351efbd4fc963f84.tar.gz scala-bb83cb8ba76643d3e8de9d34351efbd4fc963f84.tar.bz2 scala-bb83cb8ba76643d3e8de9d34351efbd4fc963f84.zip |
Closes #3469. Review by rytz.
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/Constructors.scala | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/Constructors.scala b/src/compiler/scala/tools/nsc/transform/Constructors.scala index af9c28232d..c9049d9ab1 100644 --- a/src/compiler/scala/tools/nsc/transform/Constructors.scala +++ b/src/compiler/scala/tools/nsc/transform/Constructors.scala @@ -78,18 +78,22 @@ abstract class Constructors extends Transform with ast.TreeDSL { // A transformer for expressions that go into the constructor val intoConstructorTransformer = new Transformer { + def isParamRef(sym: Symbol) = + (sym hasFlag PARAMACCESSOR) && + sym.owner == clazz && + !(sym.isGetter && sym.accessed.isVariable) && + !sym.isSetter override def transform(tree: Tree): Tree = tree match { case Apply(Select(This(_), _), List()) => // references to parameter accessor methods of own class become references to parameters // outer accessors become references to $outer parameter - if ((tree.symbol hasFlag PARAMACCESSOR) && tree.symbol.owner == clazz) + if (isParamRef(tree.symbol)) gen.mkAttributedIdent(parameter(tree.symbol.accessed)) setPos tree.pos else if (tree.symbol.outerSource == clazz && !clazz.isImplClass) gen.mkAttributedIdent(parameterNamed(nme.OUTER)) setPos tree.pos else super.transform(tree) - case Select(This(_), _) - if ((tree.symbol hasFlag PARAMACCESSOR) && !tree.symbol.isSetter && tree.symbol.owner == clazz) => + case Select(This(_), _) if (isParamRef(tree.symbol)) => // references to parameter accessor field of own class become references to parameters gen.mkAttributedIdent(parameter(tree.symbol)) setPos tree.pos case Select(_, _) => |