@@ -13,6 +13,7 @@ import Constants._
1313import Decorators ._
1414import DenotTransformers ._
1515import dotty .tools .dotc .ast .Trees ._
16+ import SymUtils ._
1617
1718object CompleteJavaEnums {
1819 val name : String = " completeJavaEnums"
@@ -37,16 +38,10 @@ class CompleteJavaEnums extends MiniPhase with InfoTransformer { thisPhase =>
3738 def transformInfo (tp : Type , sym : Symbol )(implicit ctx : Context ): Type =
3839 if (sym.isConstructor && (
3940 sym == defn.JavaEnumClass .primaryConstructor ||
40- derivesFromJavaEnum( sym.owner) ))
41+ sym.owner.derivesFromJavaEnum ))
4142 addConstrParams(sym.info)
4243 else tp
4344
44- /** Is `sym` a Scala enum class that derives (directly) from `java.lang.Enum`?
45- */
46- private def derivesFromJavaEnum (sym : Symbol )(implicit ctx : Context ) =
47- sym.is(Enum , butNot = Case ) &&
48- sym.info.parents.exists(p => p.typeSymbol == defn.JavaEnumClass )
49-
5045 /** Add constructor parameters `$name: String` and `$ordinal: Int` to the end of
5146 * the last parameter list of (method- or poly-) type `tp`.
5247 */
@@ -101,10 +96,10 @@ class CompleteJavaEnums extends MiniPhase with InfoTransformer { thisPhase =>
10196 */
10297 override def transformDefDef (tree : DefDef )(implicit ctx : Context ): DefDef = {
10398 val sym = tree.symbol
104- if (sym.isConstructor && derivesFromJavaEnum( sym.owner) )
99+ if (sym.isConstructor && sym.owner.derivesFromJavaEnum )
105100 cpy.DefDef (tree)(
106101 vparamss = tree.vparamss.init :+ (tree.vparamss.last ++ addedParams(sym, Param )))
107- else if (sym.name == nme.DOLLAR_NEW && derivesFromJavaEnum( sym.owner.linkedClass) ) {
102+ else if (sym.name == nme.DOLLAR_NEW && sym.owner.linkedClass.derivesFromJavaEnum ) {
108103 val Block ((tdef @ TypeDef (tpnme.ANON_CLASS , templ : Template )) :: Nil , call) = tree.rhs
109104 val args = tree.vparamss.last.takeRight(2 ).map(param => ref(param.symbol)).reverse
110105 val templ1 = cpy.Template (templ)(
@@ -137,15 +132,15 @@ class CompleteJavaEnums extends MiniPhase with InfoTransformer { thisPhase =>
137132 */
138133 override def transformTemplate (templ : Template )(implicit ctx : Context ): Template = {
139134 val cls = templ.symbol.owner
140- if (derivesFromJavaEnum( cls) ) {
135+ if (cls.derivesFromJavaEnum ) {
141136 val (params, rest) = decomposeTemplateBody(templ.body)
142137 val addedDefs = addedParams(cls, ParamAccessor )
143138 val addedSyms = addedDefs.map(_.symbol.entered)
144139 cpy.Template (templ)(
145140 parents = addEnumConstrArgs(defn.JavaEnumClass , templ.parents, addedSyms.map(ref)),
146141 body = params ++ addedDefs ++ rest)
147142 }
148- else if (cls.isAnonymousClass && cls.owner.is(EnumCase ) && derivesFromJavaEnum( cls.owner.owner.linkedClass) ) {
143+ else if (cls.isAnonymousClass && cls.owner.is(EnumCase ) && cls.owner.owner.linkedClass.derivesFromJavaEnum ) {
149144 def rhsOf (name : TermName ) =
150145 templ.body.collect {
151146 case mdef : DefDef if mdef.name == name => mdef.rhs
0 commit comments