ceylon.language.Annotation.ceylon Maven / Gradle / Ivy
import ceylon.language.meta {
annotations,
optionalAnnotation,
sequencedAnnotations
}
"""The supertype of all *annotation classes*.
### Annotation classes
An *annotation class* must satisfy `Annotation`,
[[OptionalAnnotation]], or [[SequencedAnnotation]] and
must be annotated `final annotation`. For example:
"An annotation class."
final annotation class Example(shared String description)
satisfies Annotation {}
Annotation classes which satisfy `Annotation` directly
may be applied to any program element that supports
annotations (see [[Annotated]]). In practice, annotation
classes often satisfy [[OptionalAnnotation]] or
[[SequencedAnnotation]] in order to prevent annotations
being applied to inappropriate program elements.
Each initializer parameter of an annotation class must
have one of the following types:
* `Integer`, `Float`, `Character`, or `String`,
* an enumerated type whose cases are all anonymous
classes, such as `Boolean`,
* a subtype of [[ceylon.language.meta.declaration::Declaration]]
* an annotation class,
* `{T*}` or `[T*]` where `T` is a legal annotation
parameter type, or
* any tuple type whose element types are legal annotation
parameter types.
An initializer parameter of an annotation class may be
variadic or defaulted.
### Annotation constructors
An *annotation constructor* is simply a top level
function, annotated with `annotation` whose return type
is an annotation class type. For example:
"An annotation constructor."
annotation Example example(String description="")
=> Example(description);
Each parameter of an annotation constructor must have one
of the following types:
* `Integer`, `Float`, `Character`, or `String`,
* an enumerated type whose cases are all anonymous classes,
such as `Boolean`,
* a subtype of [[ceylon.language.meta.declaration::Declaration]],
* an annotation type,
* `{T*}` or `[T*]` where `T` is a legal annotation
constructor parameter type, or
* any tuple type whose element types are legal annotation
constructor parameter types.
A parameter of an annotation constructor may be variadic
or defaulted.
The constructor must simply instantiate and return the
annotation class, and there are strict rules about the
arguments to the instantiation.
A given annotation class can have multiple annotation
constructors."""
see(`interface OptionalAnnotation`,
`interface SequencedAnnotation`,
`function annotations`,
`function optionalAnnotation`,
`function sequencedAnnotations`)
shared interface Annotation
of ConstrainedAnnotation<> {}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy