@@ -69,7 +69,7 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
6969 myCaseSymbols = defn.caseClassSynthesized
7070 myCaseModuleSymbols = myCaseSymbols.filter(_ ne defn.Any_equals )
7171 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
7373 }
7474
7575 def valueSymbols (using Context ): List [Symbol ] = { initSymbols; myValueSymbols }
@@ -117,6 +117,12 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
117117 def syntheticDefIfMissing (sym : Symbol ): List [Tree ] =
118118 if (existingDef(sym, clazz).exists) Nil else syntheticDef(sym) :: Nil
119119
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+
120126 def syntheticDef (sym : Symbol ): Tree = {
121127 val synthetic = sym.copy(
122128 owner = clazz,
@@ -136,12 +142,6 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
136142 else
137143 identifierRef
138144
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-
145145 def ordinalRef : Tree =
146146 if isSimpleEnumValue then // owner is `def $new(_$ordinal: Int, $name: String) = new MyEnum { ... }`
147147 ref(clazz.owner.paramSymss.head.find(_.name == nme.ordinalDollar_).get)
@@ -358,7 +358,8 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
358358 * For case classes with primitive paramters, see [[caseHashCodeBody ]].
359359 */
360360 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))
362363 else if (accessors.exists(_.info.finalResultType.classSymbol.isPrimitiveValueClass))
363364 caseHashCodeBody
364365 else
0 commit comments