| """An annotation that may occur multiple times at a given |
| program element, and only on certain program elemenets. |
| |
| A sequenced annotation is declared simply by having the |
| annotation class satisfy `SequencedAnnotation` instead of |
| [[Annotation]]. For example the following would only be |
| allowed on `class` declarations, functions or methods: |
| |
| alias ExecutableDeclaration |
| => ClassOrInterfaceDeclaration|FunctionDeclaration; |
| "Documents a pattern in which the annotated element |
| particpates." |
| shared final annotation class Pattern(String name) |
| satisfies SequencedAnnotation<Pattern, ExecutableDeclaration> {} |
| |
| At runtime a [[ceylon.language.meta.declaration::Declaration]] |
| instance can be queried for its `SequencedAnnotation`s of |
| a certain type using [[ceylon.language.meta::annotations]] |
| or [[ceylon.language.meta::sequencedAnnotations]].""" |
| see(`interface Annotation`) |
| shared interface SequencedAnnotation<out Value, |
| in ProgramElement=Annotated, |
| out Type=Anything> |
| of Value |
| satisfies ConstrainedAnnotation |
| <Value,Value[],ProgramElement,Type> |
| given Value satisfies SequencedAnnotation |
| <Value,ProgramElement,Type> |
| given ProgramElement satisfies Annotated {} |
| |