One of the many reasons for JSR-308 type annotations (as I understand it) was
to improve support for static code analyzers. The additional places that
annotations can be placed now allows static code analyzers to more accurately
assess code for potential bugs, such as NPEs.
However, the various tools out there (FindBugs, IntelliJ IDEA, and more) all
provide their own set of annotations to support such analysis, and there are a
few problems with this:
1) In order to take advantage of type annotations, these tools will have to
provide two versions of their annotation libraries: a Java 8 version with
ElementType.TYPE_USE and ElementType.TYPE_PARAMETER, and a Java < 8 version
without these.
2) This isn't portable. As a developer of an application, if I decide I need to
change static code analyzers for some reason, I have to change all of my
annotations.
3) As a consumer of other libraries that have used annotations for this
purpose, I likely have to use the same static code analyzer they do in order
for their annotations to be useful when my application is being analyzed.
JSR-305 ("Annotations for Software Defect Detection") was created for just this
purpose. It was supposed to define a set of annotations that could be relied on
universally to support software defect detection. Unfortunately, it eventually
became dormant. I'd love to see the following:
1) The JSR revived (this is outside the scope of this mailing list, I know; I
may try to join the expert group to revive it).
2) The annotations defined in the JSR added to Java SE 8 (this is where this
mailing list comes in).
3) A separate, standalone JAR of these annotations (minus ElementType.TYPE_USE
and ElementType.TYPE_PARAMETER) that can be used in Java 6 and 7 libraries and
applications.
What's the best way to proceed with this and make this happen? I'm not
suggesting a major functional change or a change to the language spec; I'm just
talking about putting a bunch of annotations in the core libs that don't do
anything by themselves without static code analysis tools like FindBugs.
Nick