Skip to content

Commit d365291

Browse files
Merge pull request #3125 from dotty-staging/improve-#3106
Do not generate equals method for case object
2 parents 520e81a + c8eed58 commit d365291

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

compiler/src/dotty/tools/dotc/transform/SyntheticMethods.scala

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,19 @@ class SyntheticMethods(thisTransformer: DenotTransformer) {
4141

4242
private var myValueSymbols: List[Symbol] = Nil
4343
private var myCaseSymbols: List[Symbol] = Nil
44+
private var myCaseModuleSymbols: List[Symbol] = Nil
4445

4546
private def initSymbols(implicit ctx: Context) =
4647
if (myValueSymbols.isEmpty) {
4748
myValueSymbols = List(defn.Any_hashCode, defn.Any_equals)
4849
myCaseSymbols = myValueSymbols ++ List(defn.Any_toString, defn.Product_canEqual,
4950
defn.Product_productArity, defn.Product_productPrefix, defn.Product_productElement)
51+
myCaseModuleSymbols = myCaseSymbols.filter(_ ne defn.Any_equals)
5052
}
5153

5254
def valueSymbols(implicit ctx: Context) = { initSymbols; myValueSymbols }
5355
def caseSymbols(implicit ctx: Context) = { initSymbols; myCaseSymbols }
56+
def caseModuleSymbols(implicit ctx: Context) = { initSymbols; myCaseModuleSymbols }
5457

5558
/** The synthetic methods of the case or value class `clazz`. */
5659
def syntheticMethods(clazz: ClassSymbol)(implicit ctx: Context): List[Tree] = {
@@ -60,7 +63,10 @@ class SyntheticMethods(thisTransformer: DenotTransformer) {
6063
else clazz.caseAccessors
6164

6265
val symbolsToSynthesize: List[Symbol] =
63-
if (clazz.is(Case)) caseSymbols
66+
if (clazz.is(Case)) {
67+
if (clazz.is(Module)) caseModuleSymbols
68+
else caseSymbols
69+
}
6470
else if (isDerivedValueClass(clazz)) valueSymbols
6571
else Nil
6672

0 commit comments

Comments
 (0)