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