File tree 1 file changed +6
-5
lines changed
compiler/src/dotty/tools/dotc/transform
1 file changed +6
-5
lines changed Original file line number Diff line number Diff line change @@ -27,22 +27,23 @@ class RepeatableAnnotations extends MiniPhase:
27
27
private def aggregateAnnotations (annotations : Seq [Annotation ])(using Context ): List [Annotation ] =
28
28
val annsByType = annotations.groupBy(_.symbol)
29
29
annsByType.flatMap {
30
- case (_, a :: Nil ) => Some (a)
31
- case (sym, anns) =>
30
+ case (_, a :: Nil ) => a :: Nil
31
+ case (sym, anns) if sym.derivesFrom(defn. ClassfileAnnotationClass ) =>
32
32
sym.annotations.find(_ matches defn.JavaRepeatableAnnot ).flatMap(_.argumentConstant(0 )) match
33
33
case Some (Constant (containerTpe : Type )) =>
34
34
val clashingAnns = annsByType.getOrElse(containerTpe.classSymbol, Nil )
35
35
if ! clashingAnns.isEmpty then
36
36
// this is the same error javac would raise in this case
37
37
val pos = clashingAnns.map(_.tree.srcPos).minBy(_.line)
38
38
report.error(" Container must not be present at the same time as the element it contains" , pos)
39
- None
39
+ Nil
40
40
else
41
41
val aggregated = JavaSeqLiteral (anns.map(_.tree).toList, TypeTree (sym.typeRef))
42
- Some ( Annotation (containerTpe, NamedArg (" value" .toTermName, aggregated)))
42
+ Annotation (containerTpe, NamedArg (" value" .toTermName, aggregated)) :: Nil
43
43
case _ =>
44
44
val pos = anns.map(_.tree.srcPos).sortBy(_.line).apply(1 )
45
45
report.error(" Not repeatable annotation repeated" , pos)
46
- None
46
+ Nil
47
+ case (_, anns) => anns
47
48
}.toList
48
49
You can’t perform that action at this time.
0 commit comments