@@ -68,7 +68,7 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
6868 myCaseSymbols = defn.caseClassSynthesized
6969 myCaseModuleSymbols = myCaseSymbols.filter(_ ne defn.Any_equals )
7070 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
7272 }
7373
7474 def valueSymbols (using Context ): List [Symbol ] = { initSymbols; myValueSymbols }
@@ -110,6 +110,12 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
110110 def syntheticDefIfMissing (sym : Symbol ): List [Tree ] =
111111 if (existingDef(sym, clazz).exists) Nil else syntheticDef(sym) :: Nil
112112
113+ def identifierRef : Tree =
114+ if isSimpleEnumValue then // owner is `def $new(_$ordinal: Int, $name: String) = new MyEnum { ... }`
115+ ref(clazz.owner.paramSymss.head.find(_.name == nme.nameDollar).get)
116+ else // assume owner is `val Foo = new MyEnum { def ordinal = 0 }`
117+ Literal (Constant (clazz.owner.name.toString))
118+
113119 def syntheticDef (sym : Symbol ): Tree = {
114120 val synthetic = sym.copy(
115121 owner = clazz,
@@ -129,12 +135,6 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
129135 else
130136 identifierRef
131137
132- def identifierRef : Tree =
133- if isSimpleEnumValue then // owner is `def $new(_$ordinal: Int, $name: String) = new MyEnum { ... }`
134- ref(clazz.owner.paramSymss.head.find(_.name == nme.nameDollar).get)
135- else // assume owner is `val Foo = new MyEnum { def ordinal = 0 }`
136- Literal (Constant (clazz.owner.name.toString))
137-
138138 def ordinalRef : Tree =
139139 if isSimpleEnumValue then // owner is `def $new(_$ordinal: Int, $name: String) = new MyEnum { ... }`
140140 ref(clazz.owner.paramSymss.head.find(_.name == nme.ordinalDollar_).get)
@@ -322,7 +322,8 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
322322 * For case classes with primitive paramters, see [[caseHashCodeBody ]].
323323 */
324324 def chooseHashcode (using Context ) =
325- if (accessors.isEmpty) Literal (Constant (ownName.hashCode))
325+ if (isNonJavaEnumValue) identifierRef.select(nme.hashCode_).appliedToTermArgs(Nil )
326+ else if (accessors.isEmpty) Literal (Constant (ownName.hashCode))
326327 else if (accessors.exists(_.info.finalResultType.classSymbol.isPrimitiveValueClass))
327328 caseHashCodeBody
328329 else
0 commit comments