@@ -68,7 +68,7 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
68
68
myCaseSymbols = defn.caseClassSynthesized
69
69
myCaseModuleSymbols = myCaseSymbols.filter(_ ne defn.Any_equals )
70
70
myEnumValueSymbols = List (defn.Product_productPrefix )
71
- myNonJavaEnumValueSymbols = myEnumValueSymbols :+ defn.Any_toString :+ defn.Enum_ordinal
71
+ myNonJavaEnumValueSymbols = myEnumValueSymbols :+ defn.Any_toString :+ defn.Enum_ordinal :+ defn. Any_hashCode
72
72
}
73
73
74
74
def valueSymbols (using Context ): List [Symbol ] = { initSymbols; myValueSymbols }
@@ -116,6 +116,12 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
116
116
def syntheticDefIfMissing (sym : Symbol ): List [Tree ] =
117
117
if (existingDef(sym, clazz).exists) Nil else syntheticDef(sym) :: Nil
118
118
119
+ def identifierRef : Tree =
120
+ if isSimpleEnumValue then // owner is `def $new(_$ordinal: Int, $name: String) = new MyEnum { ... }`
121
+ ref(clazz.owner.paramSymss.head.find(_.name == nme.nameDollar).get)
122
+ else // assume owner is `val Foo = new MyEnum { def ordinal = 0 }`
123
+ Literal (Constant (clazz.owner.name.toString))
124
+
119
125
def syntheticDef (sym : Symbol ): Tree = {
120
126
val synthetic = sym.copy(
121
127
owner = clazz,
@@ -135,12 +141,6 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
135
141
else
136
142
identifierRef
137
143
138
- def identifierRef : Tree =
139
- if isSimpleEnumValue then // owner is `def $new(_$ordinal: Int, $name: String) = new MyEnum { ... }`
140
- ref(clazz.owner.paramSymss.head.find(_.name == nme.nameDollar).get)
141
- else // assume owner is `val Foo = new MyEnum { def ordinal = 0 }`
142
- Literal (Constant (clazz.owner.name.toString))
143
-
144
144
def ordinalRef : Tree =
145
145
if isSimpleEnumValue then // owner is `def $new(_$ordinal: Int, $name: String) = new MyEnum { ... }`
146
146
ref(clazz.owner.paramSymss.head.find(_.name == nme.ordinalDollar_).get)
@@ -357,7 +357,8 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
357
357
* For case classes with primitive paramters, see [[caseHashCodeBody ]].
358
358
*/
359
359
def chooseHashcode (using Context ) =
360
- if (accessors.isEmpty) Literal (Constant (ownName.hashCode))
360
+ if (isNonJavaEnumValue) identifierRef.select(nme.hashCode_).appliedToTermArgs(Nil )
361
+ else if (accessors.isEmpty) Literal (Constant (ownName.hashCode))
361
362
else if (accessors.exists(_.info.finalResultType.classSymbol.isPrimitiveValueClass))
362
363
caseHashCodeBody
363
364
else
0 commit comments