diff options
author | Martin Odersky <odersky@gmail.com> | 2014-11-08 09:42:42 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-11-09 19:09:51 +0100 |
commit | 75c06fcb0116a9cb68aa06573431401a05713856 (patch) | |
tree | 3e85ab9b15eedc60cbf11a6ded1f8c34b4c5bcf4 /src/dotty/tools/dotc/core/SymDenotations.scala | |
parent | 4b5e6305f95f97d06325889d8bb9d21995c4deff (diff) | |
download | dotty-75c06fcb0116a9cb68aa06573431401a05713856.tar.gz dotty-75c06fcb0116a9cb68aa06573431401a05713856.tar.bz2 dotty-75c06fcb0116a9cb68aa06573431401a05713856.zip |
More robost handling of isSetter/isGetter
Now survives the case where a field is written x_=, dissumulating
a setter.
Diffstat (limited to 'src/dotty/tools/dotc/core/SymDenotations.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/SymDenotations.scala | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/dotty/tools/dotc/core/SymDenotations.scala b/src/dotty/tools/dotc/core/SymDenotations.scala index 99b1c9f77..0d92a8e5f 100644 --- a/src/dotty/tools/dotc/core/SymDenotations.scala +++ b/src/dotty/tools/dotc/core/SymDenotations.scala @@ -425,10 +425,14 @@ object SymDenotations { final def isSourceMethod(implicit ctx: Context) = this is (Method, butNot = Accessor) /** Is this a setter? */ - final def isGetter(implicit ctx: Context) = (this is Accessor) && !originalName.isSetterName + final def isGetter(implicit ctx: Context) = + (this is Accessor) && !originalName.isSetterName && !originalName.isScala2LocalSuffix /** Is this a setter? */ - final def isSetter(implicit ctx: Context) = (this is Accessor) && originalName.isSetterName + final def isSetter(implicit ctx: Context) = + (this is Accessor) && + originalName.isSetterName && + info.firstParamTypes.nonEmpty // to avoid being fooled by var x_= : Unit = ... /** is this the constructor of a class? */ final def isClassConstructor = name == nme.CONSTRUCTOR @@ -892,8 +896,9 @@ object SymDenotations { override def valRef(implicit ctx: Context): TermRef = TermRef.withSigAndDenot(owner.thisType, name.asTermName, Signature.NotAMethod, this) - override def termRefWithSig(implicit ctx: Context): TermRef = - TermRef.withSigAndDenot(owner.thisType, name.asTermName, signature, this) + override def termRefWithSig(implicit ctx: Context): TermRef = // TODO generalize + if (ctx.erasedTypes) TermRef.withFixedSym(owner.thisType, name.asTermName, symbol.asTerm) + else TermRef.withSigAndDenot(owner.thisType, name.asTermName, signature, this) def nonMemberTermRef(implicit ctx: Context): TermRef = TermRef.withFixedSym(owner.thisType, name.asTermName, symbol.asTerm) |