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

import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;

public class Issue1044 {
  static class Inner1<V> {
    // :: error: (initialization.field.uninitialized)
    V f;
  }

  static class Inner2<@Nullable T extends @Nullable Object> {
    // :: error: (initialization.field.uninitialized)
    @NonNull T f;
  }

  static class Inner3<V> {
    V f;
    // :: error: (initialization.fields.uninitialized)
    Inner3() {}
  }

  static class Inner4<@Nullable T extends @Nullable Object> {
    @NonNull T f;
    // :: error: (initialization.fields.uninitialized)
    Inner4() {}
  }

  static class Inner5<V> {
    @Nullable V f;
  }

  static class Inner6<@Nullable T extends @Nullable Object> {
    T f;
  }

  static class Inner7<V> {
    @Nullable V f;

    Inner7() {}
  }

  static class Inner8<@Nullable T extends @Nullable Object> {
    T f;

    Inner8() {}
  }

  static class Inner9<V extends Object> {
    // :: error: (initialization.field.uninitialized)
    V f;
  }

  static class Inner10<V extends Object> {
    V f;
    // :: error: (initialization.fields.uninitialized)
    Inner10() {}
  }

  static class Inner11<V extends Object> {
    @Nullable V f;
  }

  static class Inner12<V extends Object> {
    @Nullable V f;

    Inner12() {}
  }
}
