I can see that @Nullable and @Nonnull annotations could be helpful in preventing NullPointerExceptions but they do not propagate very far.
- The effectiveness of these annotations drop off completely after one level of indirection, so if you only add a few they don't propagate very far.
- Since these annotations are not well enforced there is a danger of assuming a value marked with @Nonnullis not null and consequently not performing null checks.
The code below causes a parameter marked with @Nonnull to be null without raising any complaints.  It throws a NullPointerException when it is run.
public class Clazz {
    public static void main(String[] args){
        Clazz clazz = new Clazz();
        // this line raises a complaint with the IDE (IntelliJ 11)
        clazz.directPathToA(null);
        // this line does not
        clazz.indirectPathToA(null); 
    }
    public void indirectPathToA(Integer y){
        directPathToA(y);
    }
    public void directPathToA(@Nonnull Integer x){
        x.toString(); // do stuff to x        
    }
}
Is there a way to make these annotations more strictly enforced and/or propagate further?
 
     
     
     
     
     
     
     
    
 
     
     
     
     
     
     
     
    