+ = {many} one_annotation_list annotations_tail* {-> [one_annotation_list.annotation, annotations_tail.annotation] }
+ ;
+
+one_annotation_list~nopar {-> annotation}
+ = {alone} redef visibility atid annotations_o~nopar {-> New annotation(Null, redef.kwredef, visibility, atid, Null, [], Null, annotations_o~nopar.annotations)}
+// !nopar to unambiguise 'new T@foo(bar)' between 'new T@(foo(bar))' and 'new (T@foo)(bar)'
+!nopar | {args} redef visibility atid opar no at_args [n2]:no cpar annotations_o~nopar {-> New annotation(Null, redef.kwredef, visibility, atid, opar, [at_args.at_arg], cpar, annotations_o~nopar.annotations)}
+!nopar | {nopar} redef visibility atid at_arg_single {-> New annotation(Null, redef.kwredef, visibility, atid, Null, [at_arg_single.at_arg], Null, Null)}
+ ;
+at_arg_single {-> at_arg}
+// FIXME: why expr_single but not expr_atom is not clear :(
+ = {expr} [expr]:expr_single_nopar {-> New at_arg.expr(expr.expr)}
+ ;
+
+annotations_tail {-> annotation}
+ = comma no one_annotation_list {-> one_annotation_list.annotation}