title: What is the point of NonNull annotation?
body: <p>I don't get how the NonNull annotation is supposed to help. So, let's say I have this:</p>
  
  <pre><code>void noNullArg(@NonNull Object o)
  {
      // stuff
  }
  </code></pre>
  
  <p>If I do this, I receive a warning about how 'o' might be null.</p>
  
  <pre><code>void foo()
  {
      Object o = null;
      noNullArg(o);
  }
  </code></pre>
  
  <p>But if I do this instead, I receive no warning at all.</p>
  
  <pre><code>void sendNull()
  {
      // Pass null and violate the annotation
      foo(null);
  }
  
  void foo(Object o)
  {
      noNullArg(o);
  }
  </code></pre>
  
  <p>That's a pretty trivial case that is not detected. To top it all off, the compiler seems to think that checking for null if @NonNull is set is unnecessary, when it's obviously not (it says the condition is always false).</p>