"An annotation that may occur at most once at a single program element and only on certain program elements. An optional annotation is declared simply by having the annotation class satisfy OptionalAnnotation instead of [[Annotation]]. For example the following would only be allowed on `class` declarations: final annotation class ExampleClass() satisfies OptionalAnnotation<Example, ClassDeclaration> {} At runtime a [[ceylon.language.meta.declaration::Declaration]] instance can be queried for its `OptionalAnnotation`s of a certain type using [[ceylon.language.meta::annotations]] or [[ceylon.language.meta::optionalAnnotation]]. " see(`interface Annotation`) shared interface OptionalAnnotation<out Value, in ProgramElement=Annotated> of Value satisfies ConstrainedAnnotation<Value,Value?,ProgramElement> given Value satisfies OptionalAnnotation<Value,ProgramElement> given ProgramElement satisfies Annotated {}