File tree 3 files changed +9
-1
lines changed
3 files changed +9
-1
lines changed Original file line number Diff line number Diff line change @@ -21,6 +21,13 @@ object desugar {
21
21
/** Info of a variable in a pattern: The named tree and its type */
22
22
private type VarInfo = (NameTree , Tree )
23
23
24
+ /** Names of methods that are added unconditionally to case classes */
25
+ def isDesugaredCaseClassMethodName (name : Name )(implicit ctx : Context ) =
26
+ name == nme.isDefined ||
27
+ name == nme.copy ||
28
+ name == nme.productArity ||
29
+ name.isSelectorName
30
+
24
31
// ----- DerivedTypeTrees -----------------------------------
25
32
26
33
class SetterParamTree extends DerivedTypeTree {
Original file line number Diff line number Diff line change @@ -81,6 +81,7 @@ object NameOps {
81
81
def isScala2LocalSuffix = name.endsWith(" " )
82
82
def isModuleVarName (name : Name ): Boolean =
83
83
name.stripAnonNumberSuffix endsWith MODULE_VAR_SUFFIX
84
+ def isSelectorName = name.startsWith(" " ) && name.tail.forall(_.isDigit)
84
85
85
86
/** Is name a variable name? */
86
87
def isVariableName : Boolean = name.length > 0 && {
Original file line number Diff line number Diff line change @@ -287,7 +287,7 @@ object RefChecks {
287
287
! member.isAnyOverride) {
288
288
// (*) Exclusion for default getters, fixes SI-5178. We cannot assign the Override flag to
289
289
// the default getter: one default getter might sometimes override, sometimes not. Example in comment on ticket.
290
- if (member.name == nme.isDefined && member.is( Synthetic )) // isDefined methods are added automatially , can't have an override preset.
290
+ if (member.is( Synthetic ) && desugar.isDesugaredCaseClassMethodName(member.name )) // such names are added automatically , can't have an override preset.
291
291
member.setFlag(Override )
292
292
else if (member.owner != clazz && other.owner != clazz && ! (other.owner derivesFrom member.owner))
293
293
emitOverrideError(
You can’t perform that action at this time.
0 commit comments