@@ -240,7 +240,11 @@ class DottyBackendInterface(outputDirectory: AbstractFile, val superCallsMap: Ma
240
240
private def emitArgument (av : AnnotationVisitor ,
241
241
name : String ,
242
242
arg : Tree , bcodeStore : BCodeHelpers )(innerClasesStore : bcodeStore.BCInnerClassGen ): Unit = {
243
- (normalizeArgument(arg): @ unchecked) match {
243
+ val narg = normalizeArgument(arg)
244
+ // Transformation phases are not run on annotation trees, so we need to run
245
+ // `constToLiteral` at this point.
246
+ val t = constToLiteral(narg)(ctx.withPhase(ctx.erasurePhase))
247
+ t match {
244
248
case Literal (const @ Constant (_)) =>
245
249
const.tag match {
246
250
case BooleanTag | ByteTag | ShortTag | CharTag | IntTag | LongTag | FloatTag | DoubleTag => av.visit(name, const.value)
@@ -257,10 +261,7 @@ class DottyBackendInterface(outputDirectory: AbstractFile, val superCallsMap: Ma
257
261
av.visit(name, t.args.head.tpe.classSymbol.denot.info.toTypeKind(bcodeStore)(innerClasesStore).toASMType)
258
262
case Ident (nme.WILDCARD ) =>
259
263
// An underscore argument indicates that we want to use the default value for this parameter, so do not emit anything
260
- case t : tpd.RefTree =>
261
- assert(t.symbol.denot.owner.isAllOf(Flags .JavaEnumTrait ),
262
- i " not an enum: $t / ${t.symbol} / ${t.symbol.denot.owner} / ${t.symbol.denot.owner.isTerm} / ${t.symbol.denot.owner.flagsString}" )
263
-
264
+ case t : tpd.RefTree if t.symbol.denot.owner.isAllOf(Flags .JavaEnumTrait ) =>
264
265
val edesc = innerClasesStore.typeDescriptor(t.tpe.asInstanceOf [bcodeStore.int.Type ]) // the class descriptor of the enumeration class.
265
266
val evalue = t.symbol.name.mangledString // value the actual enumeration value.
266
267
av.visitEnum(name, edesc, evalue)
@@ -306,6 +307,9 @@ class DottyBackendInterface(outputDirectory: AbstractFile, val superCallsMap: Ma
306
307
val desc = innerClasesStore.typeDescriptor(typ.asInstanceOf [bcodeStore.int.Type ]) // the class descriptor of the nested annotation class
307
308
val nestedVisitor = av.visitAnnotation(name, desc)
308
309
emitAssocs(nestedVisitor, assocs, bcodeStore)(innerClasesStore)
310
+
311
+ case t =>
312
+ ctx.error(ex " Annotation argument is not a constant " , t.sourcePos)
309
313
}
310
314
}
311
315
0 commit comments