// Test case for Issue #409
// https://github.com/typetools/checker-framework/issues/409

// @skip-test until the issue is fixed

public class Issue409 {
  public static void main(String[] args) {
    new Callback();
  }
}

class Callback {

  class MyProc {
    public void call() {
      doStuff();
    }
  }

  String foo;

  Callback() {
    MyProc p = new MyProc();
    // This call is illegal.  It passes an @UnderInitialization outer this, but MyProc.call is
    // declared to take an @Initialized outer this (whith is the default type).
    // :: error: (method.invocation)
    p.call();
    foo = "hello";
  }

  void doStuff() {
    System.out.println(foo.toLowerCase()); // this line throws a NullPointerException at run time
  }
}
