Skip to content

Commit 8a0195e

Browse files
committed
add comment about special case
1 parent 66eefc0 commit 8a0195e

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

compiler/src/dotty/tools/dotc/transform/CompleteJavaEnums.scala

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,17 @@ class CompleteJavaEnums extends MiniPhase with InfoTransformer { thisPhase =>
105105
val enums = moduleCls.info.decls.filter(member => member.isAllOf(EnumValue))
106106
for { enumValue <- enums }
107107
yield {
108+
def forwarderSym(flags: FlagSet, info: Type): Symbol { type ThisName = TermName } =
109+
val sym = newSymbol(clazz, enumValue.name.asTermName, flags, info)
110+
sym.addAnnotation(Annotations.Annotation(defn.ScalaStaticAnnot))
111+
sym
112+
val body = moduleRef.select(enumValue)
108113
if ctx.settings.scalajs.value then
109-
val methodSym = newSymbol(clazz, enumValue.name.asTermName, EnumValue | Method | JavaStatic, MethodType(Nil, enumValue.info))
110-
methodSym.addAnnotation(Annotations.Annotation(defn.ScalaStaticAnnot))
111-
DefDef(methodSym, moduleRef.select(enumValue))
114+
// scala.js has no support for <clinit> or reading static fields from another class so we avoid
115+
// making static fields in the enum class
116+
DefDef(forwarderSym(EnumValue | Method | JavaStatic, MethodType(Nil, enumValue.info)), body)
112117
else
113-
val fieldSym = newSymbol(clazz, enumValue.name.asTermName, EnumValue | JavaStatic, enumValue.info)
114-
fieldSym.addAnnotation(Annotations.Annotation(defn.ScalaStaticAnnot))
115-
ValDef(fieldSym, moduleRef.select(enumValue))
118+
ValDef(forwarderSym(EnumValue | JavaStatic, enumValue.info), body)
116119
}
117120
}
118121

0 commit comments

Comments
 (0)