Skip to content

Commit d8fa9ff

Browse files
committed
More robost handling of isSetter/isGetter
Now survives the case where a field is written x_=, dissumulating a setter.
1 parent 82635eb commit d8fa9ff

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

src/dotty/tools/dotc/core/SymDenotations.scala

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -425,10 +425,14 @@ object SymDenotations {
425425
final def isSourceMethod(implicit ctx: Context) = this is (Method, butNot = Accessor)
426426

427427
/** Is this a setter? */
428-
final def isGetter(implicit ctx: Context) = (this is Accessor) && !originalName.isSetterName
428+
final def isGetter(implicit ctx: Context) =
429+
(this is Accessor) && !originalName.isSetterName && !originalName.isScala2LocalSuffix
429430

430431
/** Is this a setter? */
431-
final def isSetter(implicit ctx: Context) = (this is Accessor) && originalName.isSetterName
432+
final def isSetter(implicit ctx: Context) =
433+
(this is Accessor) &&
434+
originalName.isSetterName &&
435+
info.firstParamTypes.nonEmpty // to avoid being fooled by var x_= : Unit = ...
432436

433437
/** is this the constructor of a class? */
434438
final def isClassConstructor = name == nme.CONSTRUCTOR
@@ -892,8 +896,9 @@ object SymDenotations {
892896
override def valRef(implicit ctx: Context): TermRef =
893897
TermRef.withSigAndDenot(owner.thisType, name.asTermName, Signature.NotAMethod, this)
894898

895-
override def termRefWithSig(implicit ctx: Context): TermRef =
896-
TermRef.withSigAndDenot(owner.thisType, name.asTermName, signature, this)
899+
override def termRefWithSig(implicit ctx: Context): TermRef = // TODO generalize
900+
if (ctx.erasedTypes) TermRef.withFixedSym(owner.thisType, name.asTermName, symbol.asTerm)
901+
else TermRef.withSigAndDenot(owner.thisType, name.asTermName, signature, this)
897902

898903
def nonMemberTermRef(implicit ctx: Context): TermRef =
899904
TermRef.withFixedSym(owner.thisType, name.asTermName, symbol.asTerm)

0 commit comments

Comments
 (0)