// Test case for Issue 269
// https://github.com/typetools/checker-framework/issues/269
class Issue269 {
  // Implicitly G has bound @Nullable Object
  interface Callback<G> {
    public boolean handler(G arg);
  }

  void method1(Callback callback) {
    // Allow this call.
    // :: warning: [unchecked] unchecked call to handler(G) as a member of the raw type
    // Issue269.Callback
    callback.handler(this);
  }

  // Implicitly H has bound @NonNull Object
  interface CallbackNN<H extends Object> {
    public boolean handler(H arg);
  }

  void method2(CallbackNN callback) {
    // Forbid this call, because the bound is not respected.
    // :: error: (argument)
    // :: warning: [unchecked] unchecked call to handler(H) as a member of the raw type
    // Issue269.CallbackNN
    callback.handler(null);
  }
}
