  Static analyzers can reason about the properties and behaviors of programs
and detect various issues without executing them. Hence, they should extract
the necessary information to understand the analyzed program well. Annotation
has been a widely used feature for different purposes in Java since the
introduction of Java 5. Annotations can change program structures and convey
semantics information without awareness of static analyzers, consequently
leading to imprecise analysis results. This paper presents the first
comprehensive study of annotation-induced faults (AIF) by analyzing 246 issues
in six open-source and popular static analyzers (i.e., PMD, SpotBugs,
CheckStyle, Infer, SonarQube, and Soot). We analyzed the issues' root causes,
symptoms, and fix strategies and derived ten findings and some practical
guidelines for detecting and repairing annotation-induced faults. Moreover, we
developed an automated testing framework called AnnaTester based on three
metamorphic relations originating from the findings. AnnaTester generated new
tests based on the official test suites of static analyzers and unveiled 43 new
faults, 20 of which have been fixed. The results confirm the value of our study
and its findings.
