import org.checkerframework.checker.initialization.qual.UnknownInitialization;
import org.checkerframework.checker.nullness.qual.*;

public class Raw2 {
  private @NonNull Object field;
  // :: error: (initialization.fields.uninitialized)
  public Raw2(int i) {
    this.method(this);
  }

  public Raw2() {
    try {
      this.method(this);
    } catch (NullPointerException e) {
      e.printStackTrace();
    }
    field = 0L;
  }

  private void method(@UnknownInitialization Raw2 this, @UnknownInitialization Raw2 arg) {
    // :: error: (dereference.of.nullable)
    arg.field.hashCode();
    // :: error: (dereference.of.nullable)
    this.field.hashCode();
  }

  public static void test() {
    new Raw2();
  }
}
