Been noodling on the idea of analysis annotations, was looking for other people's insights. Here's some I've come up with so far.
@Generated: A class annotation to be placed on classes created by code generation. Valuable from an analysis point of view since generated code has different quality characteristics from hand-crafted code (to put it mildly). In IDEA, one could imagine on-line error checking being disabled for generated code.
@Ignorable and @NotIgnorable: These are method annotations, indicating whether it is safe to ignore the return value of a method. Methods like InputStream.read() would be marked @NotIgnorable, indicating that ignoring the return value is dangerous. Methods like List.add() would be marked @Ignorable, since 99 times out of 100 the return value is useless to the calculation. Analysis uses are obvious.
@Pure: A method annotation, similar to "const" in C++. Declares that the method should have no visible side effects. Useful both as documentation, as something to check via analysis, and for increasing the power of data flow analysis.
@Initialization: A method annotation. Declares that a method should be declared precisely once for an object, and that it should be called before any non-@Initialization methods on an object. Probably more useful for dynamic than static analysis, one could imagine instrumenting source or bytecode to add checks for this.
@Disposal: A method annotation. Declares that a method should be declared precisely once for an object, and that no non-@Disposal methods should be called after it. Probably more useful for dynamic than static analysis.