  Annotations have been formally introduced into Java since Java 5. Since then,
annotations have been widely used by the Java community for different purposes,
such as compiler guidance and runtime processing. Despite the ever-growing use,
there is still limited empirical knowledge about the actual usage of
annotations in practice, the changes made to annotations during software
evolution, and the potential impact of annotations on code quality. To fill
this gap, we perform the first large-scale empirical study about Java
annotations on 1,094 notable open-source projects hosted on GitHub. Our study
systematically investigates annotation usage, annotation evolution, and
annotation impact, and generates 10 novel and important findings. We also
present the implications of our findings, which shed light for developers,
researchers, tool builders, and language or library designers in order to
improve all facets of Java annotation engineering.
