  This paper describes a new modelling language for the effective design and
validation of Java annotations. Since their inclusion in the 5th edition of
Java, annotations have grown from a useful tool for the addition of meta-data
to play a central role in many popular software projects. Usually they are not
conceived in isolation, but in groups, with dependency and integrity
constraints between them. However, the native support provided by Java for
expressing this design is very limited.
  To overcome its deficiencies and make explicit the rich conceptual model
which lies behind a set of annotations, we propose a domain-specific modelling
language. The proposal has been implemented as an Eclipse plug-in, including an
editor and an integrated code generator that synthesises annotation processors.
The environment also integrates a model finder, able to detect unsatisfiable
constraints between different annotations, and to provide examples of correct
annotation usages for validation. The language has been tested using a real set
of annotations from the Java Persistence API (JPA). Within this subset we have
found enough rich semantics expressible with Ann and omitted nowadays by the
Java language, which shows the benefits of Ann in a relevant field of
application.
