aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/SymDenotations.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-11-08 09:42:42 +0100
committerMartin Odersky <odersky@gmail.com>2014-11-09 19:09:51 +0100
commit75c06fcb0116a9cb68aa06573431401a05713856 (patch)
tree3e85ab9b15eedc60cbf11a6ded1f8c34b4c5bcf4 /src/dotty/tools/dotc/core/SymDenotations.scala
parent4b5e6305f95f97d06325889d8bb9d21995c4deff (diff)
downloaddotty-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.scala13
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)