code: public static boolean mayReturnNullOnNonNullInput(Expression expression)
      {
          requireNonNull(expression, "expression is null");
  
          AtomicBoolean result = new AtomicBoolean(false);
          new Visitor().process(expression, result);
          return result.get();
      }
docs: TODO: this currently produces a very conservative estimate.
  We need to narrow down the conditions under which certain constructs
  can return null (e.g., if(a, b, c) might return null for non-null a
  only if b or c can be null.